@newheap/platform-ai-chat 0.18.0 → 0.20.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 +7 -0
- package/admin/index.d.ts +320 -11
- package/agent-runs/index.d.ts +5 -0
- package/fesm2022/newheap-platform-ai-chat-admin.mjs +5792 -3527
- package/fesm2022/newheap-platform-ai-chat-admin.mjs.map +1 -1
- package/fesm2022/newheap-platform-ai-chat-agent-runs.mjs +9 -2
- package/fesm2022/newheap-platform-ai-chat-agent-runs.mjs.map +1 -1
- package/fesm2022/newheap-platform-ai-chat-testing.mjs +2989 -139
- package/fesm2022/newheap-platform-ai-chat-testing.mjs.map +1 -1
- package/fesm2022/newheap-platform-ai-chat.mjs +2237 -90
- package/fesm2022/newheap-platform-ai-chat.mjs.map +1 -1
- package/i18n/en.json +470 -10
- package/i18n/nl.json +470 -10
- package/index.d.ts +1272 -26
- package/package.json +1 -1
- package/push/nh-assistant-push-worker.js +13 -6
- package/testing/index.d.ts +199 -5
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"newheap-platform-ai-chat-testing.mjs","sources":["../../../projects/nh-ai-chat/testing/src/nh-assistant-mock-status.ts","../../../projects/nh-ai-chat/testing/src/nh-assistant-mock-admin-shared.ts","../../../projects/nh-ai-chat/testing/src/nh-assistant-mock-accounts.ts","../../../projects/nh-ai-chat/testing/src/nh-assistant-mock-works-on.ts","../../../projects/nh-ai-chat/testing/src/nh-assistant-mock-admin-agents.ts","../../../projects/nh-ai-chat/testing/src/nh-assistant-mock-admin-mcp.ts","../../../projects/nh-ai-chat/testing/src/nh-assistant-mock-consultations.ts","../../../projects/nh-ai-chat/testing/src/nh-assistant-mock-run-configuration.ts","../../../projects/nh-ai-chat/testing/src/nh-assistant-mock-admin.ts","../../../projects/nh-ai-chat/testing/src/nh-assistant-mock-files.ts","../../../projects/nh-ai-chat/testing/src/nh-assistant-mock-subjects.ts","../../../projects/nh-ai-chat/testing/src/nh-assistant-mock-agent-runs.ts","../../../projects/nh-ai-chat/testing/src/nh-assistant-mock-boards.ts","../../../projects/nh-ai-chat/testing/src/nh-assistant-mock-proposals.ts","../../../projects/nh-ai-chat/testing/src/nh-assistant-mock-authorization.ts","../../../projects/nh-ai-chat/testing/src/nh-assistant-mock-backend.ts","../../../projects/nh-ai-chat/testing/src/nh-assistant-mock-live.ts","../../../projects/nh-ai-chat/testing/src/provide-nh-assistant-mock-api.ts","../../../projects/nh-ai-chat/testing/src/public-api.ts","../../../projects/nh-ai-chat/testing/src/newheap-platform-ai-chat-testing.ts"],"sourcesContent":["/**\n * The HTTP status of every failure code, as the server's one table maps them for every assistant\n * endpoint (chat, administration, agent runs, subjects, run histories, boards, MCP and OAuth). Each\n * code has exactly one status; a code the table does not name answers 400, as on the server. Every\n * failure of the mock API takes its status from here, so the mock never answers a code with a status\n * the server would not use.\n */\nconst statusTable: Readonly<Record<number, readonly string[]>> = {\n 400: [\n 'assistant-validation',\n 'assistant-message-invalid',\n 'assistant-message-too-long',\n 'assistant-title-invalid',\n 'assistant-approval-decision-invalid',\n 'assistant-approval-expired',\n 'assistant-approval-invalid',\n 'assistant-subject-invalid',\n 'assistant-service-account-not-found',\n 'assistant-run-not-retryable',\n 'assistant-run-filter-invalid',\n 'assistant-board-scope-invalid',\n 'assistant-feedback-invalid',\n 'assistant-trigger-filter-not-found',\n 'assistant-replay-not-shadow',\n 'assistant-evaluation-not-variant',\n 'assistant-instructions-too-long',\n 'assistant-push-subscription-invalid',\n 'assistant-webhook-payload-invalid',\n 'assistant-mcp-host-blocked',\n 'assistant-mcp-secret-reference-invalid',\n 'assistant-mcp-certificate-reference-invalid',\n 'assistant-mcp-scope-not-allowed',\n 'assistant-mcp-authorization-failed',\n 'assistant-mcp-authorization-expired',\n 'assistant-mcp-authorization-invalid',\n 'assistant-mcp-pkce-unsupported',\n 'assistant-mcp-client-registration-required',\n 'assistant-mcp-oauth-not-configured',\n 'assistant-file-reference-invalid',\n 'assistant-file-upload-invalid',\n 'assistant-file-too-many-pages',\n 'assistant-file-count-limit',\n 'assistant-file-token-limit'\n ],\n 401: [\n 'assistant-webhook-signature-invalid'\n ],\n 403: [\n 'assistant-agent-forbidden',\n 'assistant-context-unavailable',\n 'assistant-owner-required',\n 'assistant-approval-forbidden',\n 'assistant-turn-forbidden',\n 'assistant-subject-access-denied',\n 'assistant-approval-policy-denied',\n 'assistant-four-eyes-required',\n 'assistant-forbidden',\n 'assistant-mcp-credential-mismatch',\n 'assistant-mcp-initiator-only',\n 'assistant-file-forbidden'\n ],\n 404: [\n 'assistant-disabled',\n 'assistant-conversation-not-found',\n 'assistant-agent-not-found',\n 'assistant-approval-not-found',\n 'assistant-share-link-invalid',\n 'assistant-participant-not-found',\n 'assistant-directory-unavailable',\n 'assistant-push-unavailable',\n 'assistant-subject-not-found',\n 'assistant-subject-type-unknown',\n 'assistant-skill-not-found',\n 'assistant-account-search-unavailable',\n 'assistant-subject-search-unavailable',\n 'assistant-skill-candidate-not-found',\n 'assistant-run-not-found',\n 'assistant-board-not-found',\n 'assistant-artifact-not-found',\n 'assistant-trigger-not-found',\n 'assistant-consultation-not-found',\n 'assistant-not-found',\n 'assistant-context-not-found',\n 'assistant-mcp-server-not-found',\n 'assistant-mcp-tool-not-found',\n 'assistant-files-unavailable',\n 'assistant-file-not-found'\n ],\n 409: [\n 'assistant-conversation-busy',\n 'assistant-message-duplicate',\n 'assistant-approval-not-pending',\n 'assistant-proposal-hash-mismatch',\n 'assistant-participant-limit-reached',\n 'assistant-no-accountable-owner',\n 'assistant-agent-disabled',\n 'assistant-agent-stopped',\n 'assistant-agent-configured-off',\n 'assistant-agent-paused',\n 'assistant-skill-stopped',\n 'assistant-skill-paused',\n 'assistant-agent-does-not-work-on',\n 'assistant-moved-to-shadow',\n 'assistant-shadow-variant',\n 'assistant-service-account-not-used',\n 'assistant-consult-route-not-allowed',\n 'assistant-consult-proposal-refused',\n 'assistant-consult-asker-decides',\n 'assistant-consult-proposal-moved',\n 'assistant-consultation-in-code',\n 'assistant-consultations-not-allowed',\n 'assistant-skill-in-code',\n 'assistant-trigger-in-code',\n 'assistant-skill-in-use',\n 'assistant-configuration-limit',\n 'assistant-run-settings-in-code',\n 'assistant-run-settings-in-use',\n 'assistant-agent-not-configured',\n 'assistant-execution-not-uncertain',\n 'assistant-proposal-stale',\n 'assistant-memory-conflict',\n 'assistant-replay-active',\n 'assistant-feedback-not-accepted',\n 'assistant-trigger-rate-limited',\n 'assistant-version-conflict',\n 'assistant-agent-exists',\n 'assistant-code-agent-not-deletable',\n 'assistant-agent-not-code',\n 'assistant-mcp-server-exists',\n 'assistant-mcp-headless-not-allowed',\n 'assistant-mcp-consent-required',\n 'assistant-mcp-connection-required',\n 'assistant-mcp-reauthorization-required',\n 'assistant-mcp-issuer-changed',\n 'assistant-mcp-authorization-not-confirmed',\n 'assistant-mcp-connection-not-supported',\n 'assistant-mcp-secret-unreadable',\n 'assistant-files-not-accepted'\n ],\n 413: [\n 'assistant-webhook-payload-too-large',\n 'assistant-file-too-large'\n ],\n 415: [\n 'assistant-file-type-not-supported',\n 'assistant-file-type-not-accepted'\n ],\n 422: [\n 'assistant-file-upload-refused',\n 'assistant-file-scan-refused'\n ],\n 429: [\n 'assistant-mcp-too-many-authorizations'\n ],\n 502: [\n 'assistant-mcp-unreachable',\n 'assistant-mcp-unauthorized',\n 'assistant-mcp-insufficient-scope',\n 'assistant-mcp-delegated-token-unavailable',\n 'assistant-mcp-discovery-failed',\n 'assistant-mcp-token-request-failed'\n ],\n 503: [\n 'assistant-proposal-check-failed',\n 'assistant-trigger-rolled-back',\n 'assistant-mcp-secret-unavailable',\n 'assistant-file-unavailable',\n 'assistant-file-upload-failed'\n ]\n};\n\nconst statuses: ReadonlyMap<string, number> = buildStatuses();\n\n/** The HTTP status the server answers a failure code with; 400 for a code the table does not name. */\nexport function mockStatusOf(code: string): number {\n return statuses.get(code) ?? 400;\n}\n\n/** Every code the table names, with its status (internal, for the library's own tests). */\nexport function mockStatusTable(): ReadonlyMap<string, number> {\n return statuses;\n}\n\nfunction buildStatuses(): ReadonlyMap<string, number> {\n const result = new Map<string, number>();\n for (const [status, codes] of Object.entries(statusTable)) {\n for (const code of codes) {\n // A code listed twice would have two statuses, which the server's table refuses at startup.\n if (result.has(code)) {\n throw new Error(`The mock status table lists '${code}' twice.`);\n }\n result.set(code, Number(status));\n }\n }\n return result;\n}\n","import { mockStatusOf } from './nh-assistant-mock-status';\n\n/** A mock response: status plus optional JSON body. */\nexport interface NhAssistantMockResult {\n status: number;\n body?: unknown;\n}\n\n/** Ids of agents and MCP servers. */\nexport const mockDashCase = /^[a-z0-9]+(?:-[a-z0-9]+)*$/;\n\n/** The longest instructions of an agent or the application context. */\nexport const mockMaxInstructions = 20_000;\n\n/** The longest reason of a state or shadow change. */\nexport const mockMaxStateReason = 500;\n\n/**\n * A contract error response: `{ code, messageKey, errors? }`, never free text, with the one status the\n * server's table gives the code (`mockStatusOf`). Field errors may come with any code.\n */\nexport function mockFailure(code: string, errors?: Record<string, string[]>): NhAssistantMockResult {\n return {\n status: mockStatusOf(code),\n body: { code, messageKey: `nh-assistant.errors.${code}`, ...(errors && Object.keys(errors).length > 0 ? { errors } : {}) }\n };\n}\n\nexport function mockValidationFailure(field?: string): NhAssistantMockResult {\n return mockFailure('assistant-validation', field ? { [field]: ['invalid'] } : undefined);\n}\n\n/** A stable, non-cryptographic fingerprint; the mock only needs change detection. */\n/**\n * The warnings of an agent or skill that classifies its model calls with `classification` on\n * `profile`: `classification-not-permitted` when the scenario lists what the profile and its\n * fallbacks permit and that does not include it, as the server reports it; none without a\n * classification of its own.\n */\nexport function mockClassificationWarnings(\n permitted: Record<string, readonly string[]> | undefined,\n profile: string | null | undefined,\n classification: string | null | undefined\n): string[] {\n const allowed = profile ? permitted?.[profile] : undefined;\n return classification && allowed && !allowed.includes(classification) ? ['classification-not-permitted'] : [];\n}\n\nexport function mockHashText(text: string): string {\n let hash = 0x811c9dc5;\n for (let index = 0; index < text.length; index++) {\n hash ^= text.charCodeAt(index);\n hash = Math.imul(hash, 0x01000193) >>> 0;\n }\n return `fnv1a:${hash.toString(16).padStart(8, '0')}`;\n}\n","import { AssistantAccount } from '@newheap/platform-ai-chat';\nimport { NhAssistantMockAdminScenario } from './nh-assistant-mock.models';\nimport { NhAssistantMockResult, mockFailure as failure } from './nh-assistant-mock-admin-shared';\n\n/** The most distinct account ids one `GET admin/accounts?ids=` reads, and the longest id. */\nconst maxAccountIds = 50;\nconst maxAccountIdLength = 256;\n\n/**\n * The accounts of the mock administration: the scenario's `accounts`, searched by name or e-mail\n * address for technical accounts. Without accounts the search is unavailable unless the run\n * catalog says otherwise, and every account id that does not start with `unknown` is accepted.\n */\nexport class NhAssistantMockAccounts {\n private readonly accounts: AssistantAccount[];\n\n /** Whether the application searches its accounts, as the run catalog reports it. */\n readonly searchable: boolean;\n\n constructor(scenario: NhAssistantMockAdminScenario) {\n this.accounts = scenario.accounts ?? [];\n this.searchable = scenario.runCatalog?.accountSearch ?? this.accounts.length > 0;\n }\n\n /** Whether the server would refuse the account as a technical account: unknown to the application. */\n rejects(actorId: string): boolean {\n return actorId.startsWith('unknown')\n || (this.accounts.length > 0 && !this.accounts.some(account => account.actorId === actorId));\n }\n\n /**\n * `GET admin/accounts`: with `query` the scenario's accounts whose name or e-mail address contains\n * it, with `ids` (at most 50 distinct ids of at most 256 characters, as on the server) the known\n * accounts among them; without accounts the search is unavailable.\n */\n search(method: string, query: URLSearchParams): NhAssistantMockResult {\n if (method !== 'GET') {\n return { status: 405 };\n }\n const ids = query.get('ids');\n if (ids) {\n const wanted = new Set(ids.split(',').map(id => id.trim()).filter(id => id.length > 0));\n if (wanted.size > maxAccountIds || [...wanted].some(id => id.length > maxAccountIdLength)) {\n return failure('assistant-validation', { ids: ['invalid'] });\n }\n return { status: 200, body: this.accounts.filter(account => wanted.has(account.actorId)) };\n }\n const text = (query.get('query') ?? '').trim().toLocaleLowerCase();\n if (text.length < 2 || text.length > 100) {\n return failure('assistant-validation', { query: ['invalid'] });\n }\n if (!this.searchable) {\n return failure('assistant-account-search-unavailable');\n }\n const limit = Math.min(Math.max(Number(query.get('limit') ?? 20) || 20, 1), 50);\n return {\n status: 200,\n body: this.accounts\n .filter(account => account.displayName.toLocaleLowerCase().includes(text)\n || (account.detail ?? '').toLocaleLowerCase().includes(text))\n .slice(0, limit)\n };\n }\n}\n","import { AdminAgent, AdminAgentInput } from '@newheap/platform-ai-chat';\n\n/** What an agent works on, as the administration DTO carries it. */\nexport type MockWorksOn = Required<Pick<AdminAgent,\n 'worksOnSubjectTypes' | 'worksOnAllSubjects' | 'worksOnApplication' | 'perDivision' | 'runPolicy' | 'viewPolicy' | 'worksOnDeclared'>>;\n\n/** The platform's type of the whole application. */\nexport const mockSystemSubjectType = 'nh-system';\n\nconst subjectTypePattern = /^[a-z][a-z0-9]*(-[a-z0-9]+)*$/;\nconst maxSubjectTypes = 20;\nconst worksOnFields = ['worksOnSubjectTypes', 'worksOnAllSubjects', 'worksOnApplication', 'perDivision', 'runPolicy', 'viewPolicy'] as const;\n\n/** An agent that does not say what it works on: every object type, not the application, app-wide. */\nexport const mockUndeclaredWorksOn: MockWorksOn = {\n worksOnSubjectTypes: [],\n worksOnAllSubjects: true,\n worksOnApplication: false,\n perDivision: false,\n runPolicy: null,\n viewPolicy: null,\n worksOnDeclared: false\n};\n\n/**\n * What an administrator says an agent works on, as the server reads it, or `null` when the input\n * says nothing: the six fields travel together, the omitted ones read as not chosen, and without\n * types, all objects or the application the agent works on all object types.\n */\nexport function mockWorksOnFromInput(input: AdminAgentInput): MockWorksOn | null {\n if (worksOnFields.every(field => input[field] === undefined || input[field] === null)) {\n return null;\n }\n\n const nothingChosen = input.worksOnSubjectTypes == null && input.worksOnAllSubjects == null && input.worksOnApplication == null;\n return {\n worksOnSubjectTypes: [...new Set((input.worksOnSubjectTypes ?? []).map(type => type.trim()))].sort(),\n worksOnAllSubjects: nothingChosen || input.worksOnAllSubjects === true,\n worksOnApplication: input.worksOnApplication === true,\n perDivision: input.perDivision === true,\n runPolicy: input.runPolicy?.trim() || null,\n viewPolicy: input.viewPolicy?.trim() || null,\n worksOnDeclared: true\n };\n}\n\n/**\n * The field errors of what an agent works on, with the server's rules: something chosen, not types\n * next to all objects, at most 20 registered application types, per division only when the\n * application lists divisions, and policies from those the application lists.\n */\nexport function mockWorksOnErrors(\n worksOn: MockWorksOn,\n knownTypes: readonly string[],\n agentPolicies: readonly string[],\n divisions: boolean\n): Record<string, string[]> {\n const errors: Record<string, string[]> = {};\n const add = (field: string, code: string): void => {\n errors[field] = [...new Set([...(errors[field] ?? []), code])];\n };\n const types = worksOn.worksOnSubjectTypes;\n if (types.length === 0 && !worksOn.worksOnAllSubjects && !worksOn.worksOnApplication) {\n add('worksOn', 'required');\n }\n if (worksOn.worksOnAllSubjects && types.length > 0) {\n add('worksOn', 'invalid');\n }\n if (types.length > maxSubjectTypes) {\n add('worksOnSubjectTypes', 'too-long');\n }\n if (types.some(type => !subjectTypePattern.test(type))) {\n add('worksOnSubjectTypes', 'invalid');\n }\n if (types.some(type => subjectTypePattern.test(type) && (type.startsWith('nh-') || !knownTypes.includes(type)))) {\n add('worksOnSubjectTypes', 'not-found');\n }\n if (worksOn.perDivision && !divisions) {\n add('perDivision', 'invalid');\n }\n if (worksOn.runPolicy !== null && !agentPolicies.includes(worksOn.runPolicy)) {\n add('runPolicy', 'not-found');\n }\n if (worksOn.viewPolicy !== null && !agentPolicies.includes(worksOn.viewPolicy)) {\n add('viewPolicy', 'not-found');\n }\n return errors;\n}\n\n/** Whether an agent works on subjects of the type, as the server's rule decides it. */\nexport function mockWorksOnCovers(agent: Partial<MockWorksOn>, subjectType: string): boolean {\n if (subjectType === mockSystemSubjectType) {\n return agent.worksOnApplication === true;\n }\n if (subjectType.startsWith('nh-')) {\n return false;\n }\n return agent.worksOnAllSubjects !== false || (agent.worksOnSubjectTypes ?? []).includes(subjectType);\n}\n","import {\n AdminAgent,\n AdminAgentInput,\n AgentConsultationRoutesState,\n AgentReplay,\n AgentShadowState,\n AgentSkillState,\n AgentState,\n AgentSummary,\n AssistantAutonomy,\n AssistantDataClassification,\n NhAssistantConsultationRoute\n} from '@newheap/platform-ai-chat';\nimport { NhAssistantMockAdminAgent, NhAssistantMockScenario } from './nh-assistant-mock.models';\nimport {\n NhAssistantMockResult,\n mockClassificationWarnings,\n mockDashCase,\n mockFailure as failure,\n mockHashText as hashText,\n mockMaxInstructions as maxInstructions,\n mockMaxStateReason as maxStateReason,\n mockValidationFailure as validationFailure\n} from './nh-assistant-mock-admin-shared';\nimport { mockUndeclaredWorksOn, mockWorksOnErrors, mockWorksOnFromInput } from './nh-assistant-mock-works-on';\n\ninterface StoredAgent {\n agent: AdminAgent;\n /** The definition in code, for `reset`; null for admin agents. */\n codeDefinition: AdminAgentInput | null;\n /** The routes of the agent's consultations and the switches administrators set. */\n consultations: StoredConsultationRoutes;\n}\n\n/** The routes code allows for an agent's consultations and the switches administrators set. */\ninterface StoredConsultationRoutes {\n /**\n * The subject types whose consultation in code allows each route; `null` for an agent without\n * consultations in code.\n */\n allowed: Partial<Record<NhAssistantConsultationRoute, string[]>> | null;\n /** The switch per route: `true` on, `false` off; a missing route follows the code. */\n overrides: Partial<Record<NhAssistantConsultationRoute, boolean>>;\n changedAt: string | null;\n changedBy: string | null;\n reason: string | null;\n}\n\n/** The routes in the order the server lists them, with the field of the request that switches each. */\nconst consultationRoutes: readonly [NhAssistantConsultationRoute, 'askerDecides' | 'subjectAgentRights' | 'subjectAskerRights'][] = [\n ['asker-decides', 'askerDecides'],\n ['subject-agent-rights', 'subjectAgentRights'],\n ['subject-asker-rights', 'subjectAskerRights']\n];\n\n/** What the agents read of the other areas of the mock administration. */\nexport interface NhAssistantMockAgentRules {\n /** Whether an MCP server with this id exists, for `mcpServerIds`. */\n hasServer(serverId: string): boolean;\n /** The policies administrators may choose as run and view policies, by name. */\n agentPolicyNames(): string[];\n /** Whether the scenario lists divisions, so an agent may work per division. */\n divisionsListed(): boolean;\n /** The profiles the run catalog offers, which an agent created here may choose. */\n profileNames(): string[];\n /**\n * The agent's consultations defined as data that are in effect, each with the routes in effect: they\n * count for its route switches as consultations in code do.\n */\n dataConsultations(agentId: string): { subjectType: string; routes: NhAssistantConsultationRoute[] }[];\n}\n\n/** The profile of an agent that did not choose one, as the application's chat profile. */\nconst mockChatProfile = 'chat';\n\nconst autonomyLevels: AssistantAutonomy[] = ['observe', 'explain', 'propose', 'simulate', 'execute'];\nconst dataClassifications: AssistantDataClassification[] = ['public', 'internal', 'confidential', 'restricted'];\n\n/**\n * The agents of the mock administration: agents in code and agents created as data, their state,\n * shadow modes, technical accounts, feedback, evaluation and replays. The mock runs no agents on\n * their own, so reports and replays are empty.\n */\nexport class NhAssistantMockAdminAgents {\n private readonly agents = new Map<string, StoredAgent>();\n private readonly replays = new Map<string, AgentReplay[]>();\n\n constructor(\n private readonly scenario: NhAssistantMockScenario,\n private readonly now: () => string,\n private readonly rules: NhAssistantMockAgentRules\n ) {\n const admin = scenario.admin ?? {};\n const agents: NhAssistantMockAdminAgent[] = admin.agents\n ?? scenario.agents.map(agent => ({ ...codeAgentFromSummary(agent), source: 'code' as const }));\n // How an agent runs, in code or as data, belongs to its run configuration, not to the agent.\n for (const {\n source, skills, shadowOf, shadow, serviceAccount, worksOnDeclared, knownSubjectTypes, consultations, consultationDescriptions,\n codeRunSettings: _, runConfiguration: __, consultableAsData: ___, dataConsultations: ____, ...input\n } of agents) {\n const agentShadow = shadowOf !== undefined || shadow === true;\n const initial = this.toAgent(input, source, 1, false);\n this.agents.set(input.id, {\n agent: {\n ...initial,\n // Code says what its agents work on; a scenario agent that says nothing works on all objects.\n ...(source === 'code' ? { ...(mockWorksOnFromInput(input) ?? mockUndeclaredWorksOn), worksOnDeclared: worksOnDeclared ?? mockWorksOnFromInput(input) !== null } : {}),\n knownSubjectTypes: knownSubjectTypes ?? [],\n shadowOf: shadowOf ?? null,\n shadow: shadowState(agentShadow, shadowOf !== undefined || shadow === true, null, shadowOf !== undefined),\n serviceAccount: serviceAccount === undefined\n ? null\n : { actorId: serviceAccount, configuredActorId: serviceAccount, overridden: false, changedAt: null, changedBy: null, reason: null },\n skills: (skills ?? []).map((skill): AgentSkillState => ({\n skillId: skill.skillId,\n description: skill.description,\n runState: skill.startsOff === true ? 'off' as const : 'active' as const,\n changedAt: null,\n changedBy: null,\n reason: null,\n waitingInputs: 0,\n toolCallsToday: 0,\n tokensToday: 0,\n dailyToolCalls: null,\n dailyTokens: null,\n cancelledRuns: 0,\n startedRuns: 0,\n shadow: shadowState(agentShadow || skill.shadow === true, skill.shadow === true, null, shadowOf !== undefined)\n }))\n },\n codeDefinition: source === 'code' ? structuredClone(input) : null,\n // Consultations in code belong to agents in code; every agent may get consultations as data.\n consultations: noSwitches(source === 'code' && (consultations !== undefined || consultationDescriptions !== undefined)\n ? structuredClone(consultations ?? {})\n : null)\n });\n }\n }\n\n find(agentId: string): AdminAgent | undefined {\n return this.agents.get(agentId)?.agent;\n }\n\n has(agentId: string): boolean {\n return this.agents.has(agentId);\n }\n\n /** Every agent, in the order they were added. */\n all(): AdminAgent[] {\n return [...this.agents.values()].map(stored => stored.agent);\n }\n\n /** Removes a deleted MCP server from the agents it was assigned to. */\n removeServer(serverId: string): void {\n for (const agent of this.agents.values()) {\n agent.agent = { ...agent.agent, mcpServerIds: agent.agent.mcpServerIds.filter(id => id !== serverId) };\n }\n }\n\n /** Chat agents: code agents keep their keys, admin agents carry literal text; stopped agents are left out. */\n chatAgents(): AgentSummary[] {\n const result: AgentSummary[] = [];\n for (const { agent } of this.agents.values()) {\n // An agent kept out of the chat still works on its own.\n if (agent.runState === 'stopped' || agent.runState === 'configured-off' || agent.offeredInChat === false) {\n continue;\n }\n\n const summary = this.scenario.agents.find(item => item.id === agent.id);\n result.push(summary && agent.source === 'code'\n ? { ...summary, version: agent.version }\n : {\n id: agent.id,\n version: agent.version,\n displayNameKey: agent.displayName,\n descriptionKey: agent.description,\n canMutate: agent.autonomy === 'execute'\n });\n }\n return result;\n }\n\n /**\n * `admin/agents`, `admin/agents/{id}` and their `reset`, `state`, `shadow`, `service-account`,\n * `consultation-routes` and `kill-switch`.\n */\n agentsEndpoint(method: string, id: string | undefined, action: string | undefined, body: unknown, length: number): NhAssistantMockResult {\n if (id === undefined) {\n if (method === 'GET') {\n return { status: 200, body: [...this.agents.values()].map(stored => stored.agent) };\n }\n if (method !== 'POST') {\n return { status: 405 };\n }\n\n const input = body as AdminAgentInput;\n const invalid = this.agentFailure(input, 'admin');\n if (invalid) {\n return invalid;\n }\n if (this.agents.has(input.id)) {\n return failure('assistant-agent-exists');\n }\n\n const agent = this.toAgent(input, 'admin', 1, false);\n this.agents.set(agent.id, { agent, codeDefinition: null, consultations: noSwitches(null) });\n return { status: 201, body: agent };\n }\n\n const stored = this.agents.get(id);\n if (!stored) {\n return failure('assistant-not-found');\n }\n\n if (length === 4 && action === 'reset' && method === 'POST') {\n if (!stored.codeDefinition) {\n return failure('assistant-agent-not-code');\n }\n stored.agent = this.toAgent(stored.codeDefinition, 'code', stored.agent.version + 1, false, stored.agent);\n return { status: 200, body: stored.agent };\n }\n if (length === 4 && action === 'state') {\n return this.agentStateEndpoint(stored, method, body);\n }\n if (length === 4 && action === 'shadow' && method === 'POST') {\n return this.agentShadowEndpoint(stored, body);\n }\n if (length === 4 && action === 'service-account' && method === 'POST') {\n return this.serviceAccountEndpoint(stored, body);\n }\n if (length === 4 && action === 'consultation-routes' && method === 'POST') {\n return this.consultationRoutesEndpoint(stored, body);\n }\n if (length === 4 && action === 'kill-switch' && method === 'POST') {\n const engaged = (body as { engaged?: unknown } | undefined)?.engaged;\n if (typeof engaged !== 'boolean') {\n return validationFailure();\n }\n // Releasing never switches on an agent that was off, as on the server: one that was off when\n // it stopped goes back off, and one that is off stays off.\n const released = stored.agent.runState === 'off' || stored.agent.offBeforeStop === true ? 'off' : 'active';\n const changed = this.agentStateEndpoint(stored, 'POST', { state: engaged ? 'stopped' : released });\n return changed.status === 200\n ? {\n status: 200,\n body: { agentId: id, enabled: stored.agent.runState !== 'stopped', cancelledRuns: 0, runState: stored.agent.runState }\n }\n : changed;\n }\n if (length !== 3) {\n return failure('assistant-not-found');\n }\n\n if (method === 'PUT') {\n const input = body as AdminAgentInput & { expectedVersion?: number };\n const invalid = input?.id !== id ? validationFailure() : this.agentFailure(input, stored.agent.source);\n if (invalid) {\n return invalid;\n }\n if (input.expectedVersion !== stored.agent.version) {\n return failure('assistant-version-conflict');\n }\n\n const { expectedVersion, ...definition } = input;\n stored.agent = this.toAgent(definition, stored.agent.source, stored.agent.version + 1, stored.agent.source === 'code', stored.agent);\n return { status: 200, body: stored.agent };\n }\n if (method === 'DELETE') {\n if (stored.agent.source === 'code') {\n return failure('assistant-code-agent-not-deletable');\n }\n this.agents.delete(id);\n return { status: 204 };\n }\n\n return { status: 405 };\n }\n\n /**\n * `POST admin/agents/{id}/skills/{skillId}/state`: the skill's state, next to the agent's.\n */\n skillStateEndpoint(method: string, agentId: string, skillId: string, body: unknown): NhAssistantMockResult {\n const stored = this.agents.get(agentId);\n const skill = stored?.agent.skills?.find(item => item.skillId === skillId);\n if (!stored || !skill) {\n return failure('assistant-skill-not-found');\n }\n if (method !== 'POST') {\n return { status: 405 };\n }\n\n const request = body as { state?: unknown; reason?: unknown } | undefined;\n if (request?.state !== 'active' && request?.state !== 'paused' && request?.state !== 'stopped' && request?.state !== 'off') {\n return validationFailure();\n }\n const reason = typeof request.reason === 'string' && request.reason.trim().length > 0 ? request.reason.trim() : null;\n const changed: AgentSkillState = skill.runState === request.state\n ? skill\n : { ...skill, runState: request.state, changedAt: this.now(), changedBy: 'current-user', reason };\n stored.agent = { ...stored.agent, skills: stored.agent.skills!.map(item => item.skillId === skillId ? changed : item) };\n return { status: 200, body: changed };\n }\n\n /**\n * `POST admin/agents/{id}/skills/{skillId}/shadow`: one skill's shadow mode; a skill of an agent\n * in shadow works in shadow whatever its own mode.\n */\n skillShadowEndpoint(method: string, agentId: string, skillId: string, body: unknown): NhAssistantMockResult {\n const stored = this.agents.get(agentId);\n const skill = stored?.agent.skills?.find(item => item.skillId === skillId);\n if (!stored || !skill) {\n return failure('assistant-skill-not-found');\n }\n if (method !== 'POST') {\n return { status: 405 };\n }\n const request = shadowRequest(body);\n if (request === null) {\n return validationFailure();\n }\n const agentShadow = stored.agent.shadow ?? shadowState(false, false, null, false);\n if (agentShadow.locked) {\n return failure('assistant-shadow-variant');\n }\n\n const current = skill.shadow ?? shadowState(agentShadow.shadow, false, null, false);\n const override = request.mode === 'code' ? null : request.mode === 'shadow';\n const changed: AgentSkillState = current.override === override\n ? skill\n : {\n ...skill,\n shadow: {\n ...current,\n shadow: agentShadow.shadow || (override ?? current.configured),\n override,\n changedAt: this.now(),\n changedBy: 'current-user',\n reason: request.reason\n }\n };\n stored.agent = { ...stored.agent, skills: stored.agent.skills!.map(item => item.skillId === skillId ? changed : item) };\n return { status: 200, body: changed };\n }\n\n /**\n * The feedback report of an agent. The mock runs no agents on their own and records no proposals,\n * so the summary, the list and the JSON Lines export are empty.\n */\n agentFeedback(method: string, agentId: string, child: string | undefined, length: number): NhAssistantMockResult {\n if (!this.agents.has(agentId)) {\n return failure('assistant-agent-not-found');\n }\n if (method !== 'GET') {\n return { status: 405 };\n }\n\n if (length === 4) {\n return { status: 200, body: { items: [], total: 0 } };\n }\n if (length === 5 && child === 'summary') {\n const to = Date.parse(this.now());\n const from = to - 30 * 24 * 60 * 60 * 1000;\n return { status: 200, body: { agentId, from: new Date(from).toISOString(), to: new Date(to).toISOString(), rows: [] } };\n }\n if (length === 5 && child === 'export') {\n return { status: 200 };\n }\n\n return failure('assistant-not-found');\n }\n\n /**\n * The comparison of a shadow variant with its live agent. The mock runs no agents on their own,\n * so it pairs no runs and the export is empty.\n */\n agentEvaluation(method: string, agentId: string, child: string | undefined, length: number, query: URLSearchParams): NhAssistantMockResult {\n if (!this.agents.has(agentId)) {\n return failure('assistant-agent-not-found');\n }\n if (method !== 'GET') {\n return { status: 405 };\n }\n\n const variantId = query.get('variant') ?? '';\n if (this.agents.get(variantId)?.agent.shadowOf !== agentId) {\n return failure('assistant-evaluation-not-variant');\n }\n if (length === 5 && child === 'export') {\n return { status: 200 };\n }\n if (length !== 4) {\n return failure('assistant-not-found');\n }\n\n const to = query.get('to') ?? this.now();\n const from = query.get('from') ?? new Date(Date.parse(to) - 7 * 24 * 60 * 60 * 1000).toISOString();\n const noCost = {\n runs: 0, modelCalls: 0, tokens: 0, toolCalls: 0,\n averageModelCalls: 0, averageTokens: 0, averageToolCalls: 0,\n p95ModelCalls: 0, p95Tokens: 0, p95ToolCalls: 0\n };\n return {\n status: 200,\n body: {\n agentId,\n variantId,\n from,\n to,\n runs: { live: 0, variant: 0, paired: 0, replayed: 0, liveUnpaired: 0, variantUnpaired: 0, truncated: false },\n tools: [],\n liveCost: noCost,\n variantCost: noCost,\n routing: [],\n differences: []\n }\n };\n }\n\n /**\n * Replays into a shadow variant. The mock records no runs, so a replay completes at once\n * without replaying any.\n */\n agentReplay(method: string, agentId: string, action: string, body: unknown): NhAssistantMockResult {\n const stored = this.agents.get(agentId);\n if (!stored) {\n return failure('assistant-agent-not-found');\n }\n if (action === 'replays') {\n return method === 'GET' ? { status: 200, body: { items: [...(this.replays.get(agentId) ?? [])].reverse() } } : { status: 405 };\n }\n if (method !== 'POST') {\n return { status: 405 };\n }\n if (!stored.agent.shadowOf) {\n return failure('assistant-replay-not-shadow');\n }\n\n const request = (body ?? {}) as { sourceAgentId?: string | null; from?: string | null; to?: string | null; maxRuns?: number | null };\n const maxRuns = request.maxRuns ?? 100;\n if (maxRuns < 1 || maxRuns > 500) {\n return failure('assistant-message-invalid');\n }\n\n const now = this.now();\n const to = request.to ?? now;\n const replay = {\n id: crypto.randomUUID(),\n variantAgentId: agentId,\n sourceAgentId: request.sourceAgentId ?? stored.agent.shadowOf,\n from: request.from ?? new Date(Date.parse(to) - 7 * 24 * 60 * 60 * 1000).toISOString(),\n to,\n maxRuns,\n status: 'completed' as const,\n stopReason: null,\n runsReplayed: 0,\n runsSkipped: 0,\n createdAt: now,\n endedAt: now\n };\n this.replays.set(agentId, [...(this.replays.get(agentId) ?? []), replay]);\n return { status: 202, body: replay };\n }\n\n /**\n * A skill defined as data shows among the agent's skills as a skill in shadow by default, as the\n * server shows it, and off when it was added with `startsOff`; removing it takes its state along.\n */\n setDataSkill(agentId: string, skillId: string, description: string | null, startsOff = false): void {\n const stored = this.agents.get(agentId);\n if (!stored) {\n return;\n }\n const others = (stored.agent.skills ?? []).filter(skill => skill.skillId !== skillId);\n const existing = (stored.agent.skills ?? []).find(skill => skill.skillId === skillId);\n stored.agent = {\n ...stored.agent,\n skills: description === null\n ? others\n : [...others, existing ? { ...existing, description } : {\n skillId,\n description,\n runState: startsOff ? 'off' : 'active',\n changedAt: startsOff ? this.now() : null,\n changedBy: startsOff ? 'current-user' : null,\n reason: null,\n waitingInputs: 0,\n toolCallsToday: 0,\n tokensToday: 0,\n dailyToolCalls: null,\n dailyTokens: null,\n cancelledRuns: 0,\n startedRuns: 0,\n shadow: shadowState(true, true, null, stored.agent.shadow?.locked ?? false)\n }]\n };\n }\n\n /**\n * `POST admin/agents/{id}/shadow`: the agent's shadow mode as an override of the code. A\n * variant always works in shadow; the skills' effective modes follow the agent's.\n */\n private agentShadowEndpoint(stored: StoredAgent, body: unknown): NhAssistantMockResult {\n const request = shadowRequest(body);\n if (request === null) {\n return validationFailure();\n }\n const current = stored.agent.shadow ?? shadowState(false, false, null, false);\n if (current.locked) {\n return failure('assistant-shadow-variant');\n }\n\n const override = request.mode === 'code' ? null : request.mode === 'shadow';\n if (current.override !== override) {\n const shadow = override ?? current.configured;\n stored.agent = {\n ...stored.agent,\n shadow: { ...current, shadow, override, changedAt: this.now(), changedBy: 'current-user', reason: request.reason },\n skills: (stored.agent.skills ?? []).map(skill => ({ ...skill, shadow: withAgentShadow(skill.shadow, shadow) }))\n };\n }\n return { status: 200, body: this.toAgentState(stored) };\n }\n\n /**\n * `POST admin/agents/{id}/service-account`: the technical account of an agent that answers to\n * one in code. The mock accepts every account id except those starting with `unknown`.\n */\n private serviceAccountEndpoint(stored: StoredAgent, body: unknown): NhAssistantMockResult {\n const current = stored.agent.serviceAccount;\n if (!current) {\n return failure('assistant-service-account-not-used');\n }\n const request = body as { actorId?: unknown; reason?: unknown } | undefined;\n if (request === undefined || (request.actorId !== null && request.actorId !== undefined && typeof request.actorId !== 'string')) {\n return validationFailure();\n }\n const actorId = typeof request.actorId === 'string' && request.actorId.trim().length > 0 ? request.actorId.trim() : null;\n if (actorId !== null && (actorId.length > 256 || actorId.startsWith('unknown'))) {\n return actorId.length > 256 ? validationFailure() : failure('assistant-service-account-not-found');\n }\n const reason = typeof request.reason === 'string' && request.reason.trim().length > 0 ? request.reason.trim() : null;\n if (reason !== null && reason.length > maxStateReason) {\n return validationFailure();\n }\n\n const overridden = actorId !== null;\n if ((current.overridden ? current.actorId : null) !== actorId) {\n stored.agent = {\n ...stored.agent,\n serviceAccount: {\n ...current,\n actorId: actorId ?? current.configuredActorId,\n overridden,\n changedAt: this.now(),\n changedBy: 'current-user',\n reason\n }\n };\n }\n return { status: 200, body: this.toAgentState(stored) };\n }\n\n /**\n * `POST admin/agents/{id}/consultation-routes`: each route on, off or back to what the consultations\n * allow; a route left out keeps its switch. The consultations in code and as data in effect are the\n * ceiling, as on the server: switching on a route that none of them allows, or switching an agent\n * nobody can consult, answers `409 assistant-consult-route-not-allowed`.\n */\n private consultationRoutesEndpoint(stored: StoredAgent, body: unknown): NhAssistantMockResult {\n const request = body as Record<string, unknown> | undefined;\n if (!request || typeof request !== 'object') {\n return validationFailure();\n }\n for (const [, field] of consultationRoutes) {\n const value = request[field];\n if (value !== undefined && value !== null && value !== 'on' && value !== 'off' && value !== 'code') {\n return validationFailure(field);\n }\n }\n const reason = typeof request['reason'] === 'string' && request['reason'].trim().length > 0 ? request['reason'].trim() : null;\n if ((request['reason'] !== undefined && request['reason'] !== null && typeof request['reason'] !== 'string')\n || (reason !== null && reason.length > maxStateReason)) {\n return validationFailure('reason');\n }\n\n const current = stored.consultations;\n const allowed = this.allowedRoutes(stored);\n if (this.consultationRoutesState(stored) === null\n || !consultationRoutes.some(([route]) => (allowed[route]?.length ?? 0) > 0)\n || consultationRoutes.some(([route, field]) => request[field] === 'on' && (allowed[route]?.length ?? 0) === 0)) {\n return failure('assistant-consult-route-not-allowed');\n }\n\n const overrides = { ...current.overrides };\n for (const [route, field] of consultationRoutes) {\n const value = request[field];\n if (value === 'on' || value === 'off') {\n overrides[route] = value === 'on';\n } else if (value === 'code') {\n delete overrides[route];\n }\n }\n const changed = consultationRoutes.some(([route]) => overrides[route] !== current.overrides[route]);\n if (changed) {\n stored.consultations = { ...current, overrides, changedAt: this.now(), changedBy: 'current-user', reason };\n }\n return { status: 200, body: this.toAgentState(stored) };\n }\n\n /**\n * The subject types whose consultation allows each route: in code, and as data with the routes in\n * effect, as the server reads both from the agent's options in effect.\n */\n private allowedRoutes(stored: StoredAgent): Partial<Record<NhAssistantConsultationRoute, string[]>> {\n const allowed: Partial<Record<NhAssistantConsultationRoute, string[]>> = structuredClone(stored.consultations.allowed ?? {});\n for (const consultation of this.rules.dataConsultations(stored.agent.id)) {\n for (const route of consultation.routes) {\n allowed[route] = [...(allowed[route] ?? []), consultation.subjectType];\n }\n }\n return allowed;\n }\n\n /**\n * The routes of an agent's consultations as the server reports them; `null` for an agent nobody can\n * consult: it has no consultation in code and none as data in effect.\n */\n private consultationRoutesState(stored: StoredAgent): AgentConsultationRoutesState | null {\n const switches = stored.consultations;\n if (switches.allowed === null && this.rules.dataConsultations(stored.agent.id).length === 0) {\n return null;\n }\n\n const allowed = this.allowedRoutes(stored);\n return {\n routes: consultationRoutes.map(([route]) => {\n const types = allowed[route] ?? [];\n const override = switches.overrides[route] ?? null;\n return {\n route,\n allowed: types.length > 0,\n override,\n on: types.length > 0 && override !== false,\n subjectTypes: [...types]\n };\n }),\n changedAt: switches.changedAt,\n changedBy: switches.changedBy,\n reason: switches.reason\n };\n }\n\n /** The agent's state with the routes of its consultations. */\n private toAgentState(stored: StoredAgent): AgentState {\n return { ...toAgentState(stored), consultationRoutes: this.consultationRoutesState(stored) };\n }\n\n /**\n * `GET` and `POST admin/agents/{id}/state`. The mock runs no agents on their own, so a pause\n * collects no waiting events, a stop cancels no runs and switching an agent off or on starts\n * nothing; the version never changes.\n */\n private agentStateEndpoint(stored: StoredAgent, method: string, body: unknown): NhAssistantMockResult {\n if (method === 'GET') {\n return { status: 200, body: this.toAgentState(stored) };\n }\n if (method !== 'POST') {\n return { status: 405 };\n }\n\n const request = body as { state?: unknown; reason?: unknown } | undefined;\n if (request?.state === undefined || request.state === null) {\n return validationFailure();\n }\n if (request.state !== 'active' && request.state !== 'paused' && request.state !== 'stopped' && request.state !== 'off') {\n return validationFailure();\n }\n const reason = typeof request.reason === 'string' && request.reason.trim().length > 0 ? request.reason.trim() : null;\n if (reason !== null && reason.length > maxStateReason) {\n return validationFailure();\n }\n if (stored.agent.runState === 'configured-off') {\n return request.state === 'active'\n ? failure('assistant-agent-configured-off')\n : { status: 200, body: this.toAgentState(stored) };\n }\n if (stored.agent.runState !== request.state) {\n stored.agent = {\n ...stored.agent,\n isEnabled: request.state !== 'stopped',\n runState: request.state,\n // A stop remembers whether the agent was off, for the kill switch; every other change forgets it.\n offBeforeStop: request.state === 'stopped' && stored.agent.runState === 'off',\n stateChangedAt: this.now(),\n stateChangedBy: 'current-user',\n stateReason: reason\n };\n }\n return { status: 200, body: this.toAgentState(stored) };\n }\n\n /**\n * The contract failure for an invalid agent, or null when the agent is valid. What an agent created\n * here works on is checked as the server checks it; an agent in code takes it from its code.\n */\n private agentFailure(input: AdminAgentInput | undefined, source: 'code' | 'admin'): NhAssistantMockResult | null {\n if (typeof input?.instructions === 'string' && input.instructions.length > maxInstructions) {\n return failure('assistant-instructions-too-long');\n }\n if (!this.validAgent(input)) {\n return validationFailure();\n }\n\n const worksOn = source === 'admin' ? mockWorksOnFromInput(input!) : null;\n if (worksOn) {\n const errors = mockWorksOnErrors(\n worksOn,\n (this.scenario.subjectTypes ?? []).map(type => type.id),\n this.rules.agentPolicyNames(),\n this.rules.divisionsListed());\n if (Object.keys(errors).length > 0) {\n return failure('assistant-validation', errors);\n }\n }\n // An agent created here uses a profile the run catalog offers, or keeps the one it has or the\n // chat profile it gets by default; an agent in code takes its own.\n const profile = typeof input?.profile === 'string' ? input.profile.trim() : '';\n if (source === 'admin' && profile.length > 0 && profile !== mockChatProfile\n && profile !== this.agents.get(input!.id)?.agent.profile\n && !this.rules.profileNames().includes(profile)) {\n return failure('assistant-validation', { profile: ['not-found'] });\n }\n // An agent created here names the classification of its model calls, as a data skill does.\n const classification = chosenClassification(input!.dataClassification);\n if (source === 'admin' && classification !== null && !dataClassifications.includes(classification as AssistantDataClassification)) {\n return failure('assistant-validation', { dataClassification: ['invalid'] });\n }\n return null;\n }\n\n private validAgent(input: AdminAgentInput | undefined): boolean {\n const policies = this.scenario.admin?.policies;\n return !!input &&\n typeof input.id === 'string' && input.id.length <= 60 && mockDashCase.test(input.id) &&\n typeof input.displayName === 'string' && input.displayName.trim().length > 0 &&\n typeof input.description === 'string' &&\n typeof input.instructions === 'string' && input.instructions.length <= maxInstructions &&\n Array.isArray(input.toolSelectors) && input.toolSelectors.every(selector => /^[a-z0-9*][a-z0-9.*-]*$/.test(selector)) &&\n Array.isArray(input.mcpServerIds) && input.mcpServerIds.every(serverId => this.rules.hasServer(serverId)) &&\n (input.requiredPolicy === null || (typeof input.requiredPolicy === 'string' && (!policies || policies.includes(input.requiredPolicy)))) &&\n autonomyLevels.includes(input.autonomy) &&\n (input.isEnabled === undefined || typeof input.isEnabled === 'boolean');\n }\n\n /**\n * The stored agent. `isEnabled` in the input is ignored, as by the server: the state comes from\n * `previous`, and a new agent starts active.\n */\n private toAgent(\n input: AdminAgentInput,\n source: 'code' | 'admin',\n version: number,\n isOverridden: boolean,\n previous?: AdminAgent\n ): AdminAgent {\n // Only a new agent starts off, created that way here or with StartsOff() in code.\n const { isEnabled, startsOff, profile, dataClassification, ...definition } = structuredClone(input);\n const createdOff = previous === undefined && startsOff === true;\n const chosenProfile = source === 'admin' && typeof profile === 'string' && profile.trim().length > 0 ? profile.trim() : null;\n const classification = chosenClassification(dataClassification) as AssistantDataClassification | null;\n return this.withWarnings({\n ...definition,\n // An agent created here keeps its profile when the input omits it; code decides for the others.\n profile: chosenProfile ?? previous?.profile ?? mockChatProfile,\n // The same for its classification; an agent in code keeps the one of its scenario.\n dataClassification: source === 'admin' || previous === undefined\n ? classification ?? previous?.dataClassification ?? null\n : previous.dataClassification ?? null,\n isEnabled: previous?.isEnabled ?? true,\n version,\n source,\n isOverridden,\n instructionsHash: hashText(input.instructions),\n updatedAt: this.now(),\n runState: previous?.runState ?? (createdOff ? 'off' : 'active'),\n stateChangedAt: previous?.stateChangedAt ?? (createdOff && source === 'admin' ? this.now() : null),\n stateChangedBy: previous?.stateChangedBy ?? (createdOff && source === 'admin' ? 'current-user' : null),\n stateReason: previous?.stateReason ?? null,\n waitingInputs: previous?.waitingInputs ?? 0,\n skills: previous?.skills ?? [],\n shadowOf: previous?.shadowOf ?? null,\n shadow: previous?.shadow ?? shadowState(false, false, null, false),\n serviceAccount: previous?.serviceAccount ?? null,\n offBeforeStop: previous?.offBeforeStop ?? false,\n // Code decides for its agents; an agent created here keeps its choice when it is omitted.\n offeredInChat: source === 'code' && previous\n ? previous.offeredInChat ?? true\n : input.offeredInChat ?? previous?.offeredInChat ?? true,\n // The same for what it works on: omitted keeps it, and a new agent works on all objects.\n ...(source === 'code' && previous\n ? pickWorksOn(previous)\n : mockWorksOnFromInput(input) ?? (previous ? pickWorksOn(previous) : { ...mockUndeclaredWorksOn, worksOnDeclared: true })),\n knownSubjectTypes: previous?.knownSubjectTypes ?? []\n });\n }\n\n /** The agent with the warnings the server reports for it, from its profile and classification. */\n private withWarnings(agent: AdminAgent): AdminAgent {\n return {\n ...agent,\n warnings: mockClassificationWarnings(this.scenario.admin?.profileClassifications, agent.profile, agent.dataClassification)\n };\n }\n}\n\n/** A classification name the input chose, or `null` when it chose none. */\nfunction chosenClassification(value: unknown): string | null {\n return typeof value === 'string' && value.trim().length > 0 ? value.trim() : null;\n}\n\nfunction codeAgentFromSummary(agent: AgentSummary): AdminAgentInput {\n return {\n id: agent.id,\n displayName: agent.id,\n description: '',\n instructions: '',\n toolSelectors: [],\n mcpServerIds: [],\n requiredPolicy: null,\n autonomy: agent.canMutate ? 'execute' : 'explain'\n };\n}\n\nfunction toAgentState(stored: StoredAgent): AgentState {\n const agent = stored.agent;\n return {\n agentId: agent.id,\n runState: agent.runState,\n active: agent.runState === 'active',\n changedAt: agent.stateChangedAt,\n changedBy: agent.stateChangedBy,\n reason: agent.stateReason,\n waitingInputs: agent.waitingInputs,\n cancelledRuns: 0,\n startedRuns: 0,\n skills: agent.skills ?? [],\n shadowOf: agent.shadowOf ?? null,\n shadow: agent.shadow ?? shadowState(false, false, null, false),\n serviceAccount: agent.serviceAccount ?? null,\n offBeforeStop: agent.runState === 'stopped' && agent.offBeforeStop === true,\n consultationRoutes: null\n };\n}\n\n/** The route switches of an agent nobody switched yet, with the routes its consultations in code allow. */\nfunction noSwitches(allowed: Partial<Record<NhAssistantConsultationRoute, string[]>> | null): StoredConsultationRoutes {\n return { allowed, overrides: {}, changedAt: null, changedBy: null, reason: null };\n}\n\nfunction shadowState(shadow: boolean, configured: boolean, override: boolean | null, locked: boolean): AgentShadowState {\n return { shadow, configured, override, locked, changedAt: null, changedBy: null, reason: null };\n}\n\n/** A skill's mode after its agent's mode changed: the agent's shadow comes on top of its own. */\nfunction withAgentShadow(skill: AgentShadowState | undefined, agentShadow: boolean): AgentShadowState {\n const own = skill?.override ?? skill?.configured ?? false;\n return { ...(skill ?? shadowState(false, false, null, false)), shadow: agentShadow || own };\n}\n\nfunction shadowRequest(body: unknown): { mode: 'shadow' | 'live' | 'code'; reason: string | null } | null {\n const request = body as { mode?: unknown; reason?: unknown } | undefined;\n if (request?.mode !== 'shadow' && request?.mode !== 'live' && request?.mode !== 'code') {\n return null;\n }\n const reason = typeof request.reason === 'string' && request.reason.trim().length > 0 ? request.reason.trim() : null;\n return reason !== null && reason.length > maxStateReason ? null : { mode: request.mode, reason };\n}\n\n/** What a stored agent works on, carried over to its next version. */\nfunction pickWorksOn(agent: AdminAgent): Partial<AdminAgent> {\n return {\n worksOnSubjectTypes: agent.worksOnSubjectTypes ?? [],\n worksOnAllSubjects: agent.worksOnAllSubjects ?? true,\n worksOnApplication: agent.worksOnApplication ?? false,\n perDivision: agent.perDivision ?? false,\n runPolicy: agent.runPolicy ?? null,\n viewPolicy: agent.viewPolicy ?? null,\n worksOnDeclared: agent.worksOnDeclared ?? true\n };\n}\n","import {\n AdminAgent,\n AssistantDataClassification,\n McpAuthMode,\n McpAuthorization,\n McpAuthorizationStart,\n McpCompletion,\n McpConnection,\n McpConnectionScope,\n McpConnectionStatus,\n McpCustomAuthMode,\n McpDiscovery,\n McpHeadlessUse,\n McpOrganizationConnection,\n McpReader,\n McpServer,\n McpServerInput,\n McpServerTestResult,\n McpTool,\n McpToolEffect,\n NhAssistantMcpAuthorizationOutcome,\n ToolCatalogEntry\n} from '@newheap/platform-ai-chat';\nimport { NhAssistantMockRemoteTool, NhAssistantMockScenario } from './nh-assistant-mock.models';\nimport {\n NhAssistantMockResult,\n mockDashCase,\n mockFailure as failure,\n mockValidationFailure as validationFailure\n} from './nh-assistant-mock-admin-shared';\n\ninterface StoredServer {\n server: Omit<McpServer, 'hasSecret' | 'assignedAgentIds' | 'organizationConnection'>;\n /** A stored secret; a secret reference is `server.secretReference`. They exclude each other. */\n secret: string | null;\n /** The OAuth client secret; never returned. */\n oauthSecret: string | null;\n /** The organization's OAuth connection; null while not connected. */\n organization: McpOrganizationConnection | null;\n /** The caller's own OAuth connection of a server each person connects to; null while not connected. */\n personal: McpOrganizationConnection | null;\n remoteTools: NhAssistantMockRemoteTool[];\n tools: Map<string, McpTool & { inputSchemaHash: string }>;\n}\n\n/** An authorization the mock started; the mock authorization window plays its callback. */\ninterface StoredFlow {\n serverId: string;\n owner: 'organization' | 'user';\n completionCode: string;\n status: 'pending' | 'exchanged' | 'completed' | 'failed';\n allowBackgroundUse: boolean;\n expiresAt: number;\n}\n\n/** What the MCP servers read of the agents and the caller. */\nexport interface NhAssistantMockMcpContext {\n /** Every agent, for the servers assigned to them. */\n agents(): AdminAgent[];\n /** The ids of the agents the caller may use in the chat. */\n chatAgentIds(): string[];\n /** Removes a deleted server from the agents it was assigned to. */\n removeServer(serverId: string): void;\n /** Whether the caller passes the administration policy. */\n canAdminister(): boolean;\n}\n\nconst authModes = ['none', 'bearer', 'api-key', 'basic', 'forward-user-token', 'oauth', 'oauth-client-credentials'];\nconst secretModes = ['bearer', 'api-key', 'basic'];\nconst oauthModes = ['oauth', 'oauth-client-credentials'];\nconst connectionScopes: McpConnectionScope[] = ['organization', 'user'];\nconst scopeTokens = /^[\\x21\\x23-\\x5B\\x5D-\\x7E]+( [\\x21\\x23-\\x5B\\x5D-\\x7E]+)*$/;\nconst flowLifetimeMs = 10 * 60_000;\nconst headlessUses: McpHeadlessUse[] = ['never', 'organization', 'personal'];\nconst transports = ['streamable-http', 'auto'];\nconst secretReference = /^[a-z][a-z0-9-]{0,31}:[A-Za-z0-9][A-Za-z0-9._/-]{0,199}$/;\nconst certificateName = /^[A-Za-z0-9][A-Za-z0-9._-]{0,99}$/;\nconst headerName = /^[A-Za-z0-9-]{1,128}$/;\n/** The longest values the server accepts per field of a server. */\nconst maxServerId = 40;\nconst maxDisplayName = 200;\nconst maxUrl = 2048;\nconst maxSecret = 2000;\nconst maxUserName = 256;\nconst maxPolicy = 256;\nconst maxClientId = 512;\nconst maxAccountLabel = 200;\n/**\n * The readers of a server: at most 16, each with at most 16 media types, a tool name of at most 128\n * characters and a priority from -1000 to 1000.\n */\nconst maxReaders = 16;\nconst maxReaderMediaTypes = 16;\nconst maxReaderToolName = 128;\nconst readerPriority = { min: -1000, max: 1000 } as const;\nconst classifications: AssistantDataClassification[] = ['public', 'internal', 'confidential', 'restricted'];\nconst mediaTypePattern = /^[a-z0-9][a-z0-9!#$&^_.+-]*\\/[a-z0-9][a-z0-9!#$&^_.+-]*$/;\nconst controlCharacters = /[\\u0000-\\u001f\\u007f]/;\n\n/** Records one field error of a server change; the first value per field wins. */\ntype AddFieldError = (field: string, value: 'required' | 'invalid' | 'too-long' | 'not-found') => void;\n\n/**\n * The MCP servers of the mock administration and the caller's own connections: secrets are\n * write-only, new tools start disabled as mutations, a changed remote schema disables a tool, OAuth\n * servers are discovered and confirmed, and authorizations play through the mock window. The mock\n * has one person, the caller, so \"personal connections\" are the caller's.\n */\nexport class NhAssistantMockAdminMcp {\n private readonly servers = new Map<string, StoredServer>();\n /** The caller's consent per server, with the server's address and authentication it holds for. */\n private readonly consents = new Map<string, { fingerprint: string; consentedAt: string }>();\n /** Authorizations started through the mock, by flow id. */\n private readonly flows = new Map<string, StoredFlow>();\n /** What the mock authorization window answers: the person approves, denies or closes the window. */\n private authorizationOutcome: 'approve' | 'deny' | 'cancel';\n\n /**\n * `GET admin/mcp-auth-modes`: the authentication modes the application registered in code, by name,\n * for administrators.\n */\n authModesEndpoint(method: string, segmentCount: number): NhAssistantMockResult {\n if (method !== 'GET' || segmentCount !== 2) {\n return failure('assistant-not-found');\n }\n const modes = [...(this.scenario.admin?.mcpAuthModes ?? [])]\n .sort((left, right) => left.mode.localeCompare(right.mode))\n .map(item => ({ ...item }));\n return { status: 200, body: modes };\n }\n\n constructor(\n private readonly scenario: NhAssistantMockScenario,\n private readonly now: () => string,\n private readonly context: NhAssistantMockMcpContext\n ) {\n const admin = scenario.admin ?? {};\n this.authorizationOutcome = admin.mcpAuthorization ?? 'approve';\n\n for (const { remoteTools, secret, organizationConnected, personalConnected, ...input } of admin.mcpServers ?? []) {\n const stored: StoredServer = {\n server: { ...toServerFields(input), ...newServerState(input), ...oauthFields(input, null, null) },\n secret: secret ?? null,\n oauthSecret: input.oauth?.clientSecret || null,\n organization: null,\n personal: null,\n remoteTools: remoteTools ?? [],\n tools: new Map()\n };\n const readers = readersAfter(input, []);\n if (readers.length > 0) {\n // Preconfigured readers were set up after a sync of the server's tools.\n this.sync(stored);\n stored.server.readers = readers;\n }\n if (oauthModes.includes(input.authMode)) {\n // A preconfigured OAuth server was confirmed by an administrator before.\n const found = this.discovery(input.url);\n stored.server.authorization = typeof found === 'string'\n ? null\n : { issuer: found.issuer, resource: found.resource, confirmedAt: now(), confirmedBy: 'current-user' };\n if (organizationConnected) {\n stored.organization = activeConnection(now(), 'current-user', input.oauth?.scopes ?? null);\n }\n if (personalConnected) {\n stored.personal = activeConnection(now(), 'current-user', input.oauth?.scopes ?? null);\n }\n }\n this.servers.set(input.id, stored);\n }\n for (const consent of admin.mcpConnections ?? []) {\n const stored = this.servers.get(consent.serverId);\n if (stored && consent.allowBackgroundUse) {\n this.consents.set(consent.serverId, { fingerprint: consentFingerprint(stored), consentedAt: now() });\n }\n }\n }\n\n hasServer(serverId: string): boolean {\n return this.servers.has(serverId);\n }\n\n /** What the mock authorization window answers next. */\n setAuthorizationOutcome(outcome: 'approve' | 'deny' | 'cancel'): void {\n this.authorizationOutcome = outcome;\n }\n\n /**\n * Simulates what happens to a server's OAuth connections outside the application: the\n * authorization server refused a refresh (`reauthorization-required`), or the server named another\n * authorization server (`issuer-changed`).\n */\n setConnectionStatus(serverId: string, status: Exclude<McpConnectionStatus, 'not-connected' | 'active'>): void {\n const stored = this.servers.get(serverId);\n const failure = status === 'reauthorization-required' ? 'assistant-mcp-reauthorization-required' : null;\n if (stored?.organization) {\n stored.organization = { ...stored.organization, status, lastFailureCode: failure };\n }\n if (stored?.personal) {\n stored.personal = { ...stored.personal, status, lastFailureCode: failure };\n }\n }\n\n /**\n * Why the caller has to connect a server each person connects to before a turn can use it, or null\n * when the caller's connection is active.\n */\n connectionNeeded(serverId: string): { displayName: string; reason: 'not-connected' | 'reauthorization-required' | 'insufficient-scope' } | null {\n const stored = this.servers.get(serverId);\n if (!stored) {\n return null;\n }\n const personal = stored.personal;\n if (personal?.status === 'active') {\n return personal.requiredScopes ? { displayName: stored.server.displayName, reason: 'insufficient-scope' } : null;\n }\n return {\n displayName: stored.server.displayName,\n reason: personal?.status === 'reauthorization-required' ? 'reauthorization-required' : 'not-connected'\n };\n }\n\n /**\n * Plays the callback of a started authorization as the authorization server and the callback page\n * would: the person approves, denies or closes the window.\n */\n authorizeFlow(flowId: string): NhAssistantMcpAuthorizationOutcome {\n const flow = this.flows.get(flowId);\n if (!flow || flow.status !== 'pending' || flow.expiresAt < Date.parse(this.now())) {\n return { flowId: null, code: 'assistant-mcp-authorization-expired' };\n }\n if (this.authorizationOutcome === 'cancel') {\n return { flowId, code: 'assistant-mcp-authorization-cancelled' };\n }\n if (this.authorizationOutcome === 'deny') {\n flow.status = 'failed';\n return { flowId, code: 'assistant-mcp-authorization-failed' };\n }\n flow.status = 'exchanged';\n return { flowId, completionCode: flow.completionCode };\n }\n\n /** Replaces the tool list of a simulated remote server; the next sync picks it up. */\n setRemoteTools(serverId: string, tools: NhAssistantMockRemoteTool[]): void {\n const stored = this.servers.get(serverId);\n if (stored) {\n stored.remoteTools = structuredClone(tools);\n }\n }\n\n /** The enabled MCP tools for the tool catalog of the administration. */\n catalogEntries(): ToolCatalogEntry[] {\n const catalog: ToolCatalogEntry[] = [];\n for (const stored of this.servers.values()) {\n for (const tool of stored.tools.values()) {\n if (tool.isEnabled) {\n // MCP tools never declare the object they concern.\n catalog.push({ id: tool.localId, source: 'mcp', effect: tool.effect, description: tool.descriptionOverride ?? tool.description, subjectType: null });\n }\n }\n }\n return catalog;\n }\n\n /**\n * `GET mcp-connections` and `PUT mcp-connections/{serverId}`: the caller's consent to background\n * use of servers that run with the caller's own account. A consent holds for the server's address\n * and authentication as they were; a change shows it as not allowed again.\n */\n handleConnections(method: string, segments: string[], body: unknown): NhAssistantMockResult {\n if (segments.length === 2 && segments[1] === 'complete') {\n return method === 'POST' ? this.complete(body) : { status: 405 };\n }\n const personal = this.personalServers();\n if (segments.length === 1) {\n return method === 'GET' ? { status: 200, body: personal } : { status: 405 };\n }\n const serverId = segments[1];\n const listed = personal.find(connection => connection.serverId === serverId);\n if (segments.length === 3 && segments[2] === 'authorize') {\n if (method !== 'POST') {\n return { status: 405 };\n }\n const found = this.personalServer(serverId, listed);\n if ('failure' in found) {\n return found.failure;\n }\n const request = body as { returnUrl?: unknown; allowBackgroundUse?: unknown } | undefined;\n if (request?.returnUrl !== undefined && request.returnUrl !== null && !this.allowedReturnUrl(request.returnUrl)) {\n return validationFailure('returnUrl');\n }\n return this.startFlow(found.stored, 'user', request?.allowBackgroundUse === true && found.connection.offersBackgroundUse);\n }\n if (segments.length === 2 && method === 'DELETE') {\n const found = this.personalServer(serverId, listed);\n if ('failure' in found) {\n return found.failure;\n }\n // The consent to background use stays until the person withdraws it.\n found.stored.personal = null;\n return { status: 204 };\n }\n if (segments.length !== 2 || method !== 'PUT') {\n return segments.length === 2 ? { status: 405 } : failure('assistant-not-found');\n }\n\n if (!listed) {\n return failure('assistant-mcp-server-not-found');\n }\n if (!listed.offersBackgroundUse) {\n return failure('assistant-mcp-headless-not-allowed');\n }\n const allow = (body as { allowBackgroundUse?: unknown } | undefined)?.allowBackgroundUse;\n if (typeof allow !== 'boolean') {\n return failure('assistant-validation', { allowBackgroundUse: ['required'] });\n }\n if (allow) {\n this.consents.set(serverId, { fingerprint: consentFingerprint(this.servers.get(serverId)!), consentedAt: this.now() });\n } else {\n this.consents.delete(serverId);\n }\n return { status: 200, body: this.personalServers().find(connection => connection.serverId === serverId) };\n }\n\n /**\n * The caller's personal OAuth server, or why it is none: only a server each person connects to with\n * OAuth has personal connections, and the caller's are those of agents the caller may use.\n */\n private personalServer(\n serverId: string,\n listed: McpConnection | undefined\n ): { failure: NhAssistantMockResult } | { stored: StoredServer; connection: McpConnection } {\n const stored = this.servers.get(serverId);\n if (!stored) {\n return { failure: failure('assistant-mcp-server-not-found') };\n }\n if (!isPersonalOAuth(stored.server)) {\n return { failure: failure('assistant-mcp-connection-not-supported') };\n }\n if (!listed) {\n return { failure: failure('assistant-mcp-server-not-found') };\n }\n return { stored, connection: listed };\n }\n\n /** `admin/mcp-servers` and everything below it. */\n serversEndpoint(\n method: string,\n id: string | undefined,\n action: string | undefined,\n child: string | undefined,\n body: unknown,\n length: number\n ): NhAssistantMockResult {\n if (id === 'discover' && length === 3 && method === 'POST') {\n const url = (body as { url?: unknown } | undefined)?.url;\n if (typeof url !== 'string' || url.trim().length === 0) {\n return failure('assistant-validation', { url: ['required'] });\n }\n const found = this.discovery(url.trim());\n return typeof found === 'string' ? discoveryFailure(found) : { status: 200, body: found };\n }\n if (id === undefined) {\n if (method === 'GET') {\n return { status: 200, body: [...this.servers.values()].map(stored => this.toServer(stored)) };\n }\n if (method !== 'POST') {\n return { status: 405 };\n }\n\n const input = body as McpServerInput;\n if (!isServerInput(input)) {\n return validationFailure();\n }\n const errors = this.fieldErrors(input, null);\n if (Object.keys(errors).length > 0) {\n return failure('assistant-validation', errors);\n }\n if (this.servers.has(input.id)) {\n return failure('assistant-mcp-server-exists');\n }\n const oauth = this.confirmOAuth(input, null);\n if ('failure' in oauth) {\n return oauth.failure;\n }\n\n const stored: StoredServer = {\n server: { ...toServerFields(input), ...newServerState(input), ...oauthFields(input, null, oauth.authorization) },\n secret: secretModes.includes(input.authMode) && input.secret ? input.secret : null,\n oauthSecret: oauthModes.includes(input.authMode) && input.oauth?.clientSecret ? input.oauth.clientSecret : null,\n organization: null,\n personal: null,\n remoteTools: [],\n tools: new Map()\n };\n this.servers.set(input.id, stored);\n return { status: 201, body: this.toServer(stored) };\n }\n\n const stored = this.servers.get(id);\n if (!stored) {\n return failure('assistant-mcp-server-not-found');\n }\n\n if (length === 3) {\n if (method === 'PUT') {\n const input = body as McpServerInput;\n if (!isServerInput(input)) {\n return validationFailure();\n }\n const errors = this.fieldErrors(input, stored);\n if (input.id !== id) {\n errors['id'] = ['invalid'];\n }\n if (Object.keys(errors).length > 0) {\n return failure('assistant-validation', errors);\n }\n // An omitted headless use, transport or user name keeps the stored value, as on the server.\n const headlessUse = input.headlessUse ?? stored.server.headlessUse;\n const oauth = this.confirmOAuth(input, stored);\n if ('failure' in oauth) {\n return oauth.failure;\n }\n const before = stored.server;\n stored.server = {\n ...stored.server,\n ...toServerFields(input, stored.server),\n ...oauthFields(input, stored.server, oauth.authorization),\n headlessUse,\n transport: input.transport ?? stored.server.transport,\n readers: readersAfter(input, stored.server.readers)\n };\n if (!oauthModes.includes(input.authMode)) {\n stored.oauthSecret = null;\n } else if (input.oauth?.clientSecret) {\n stored.oauthSecret = input.oauth.clientSecret;\n } else if (input.oauth?.clientSecretReference) {\n stored.oauthSecret = null;\n }\n stored.server = { ...stored.server, oauth: stored.server.oauth && { ...stored.server.oauth, hasClientSecret: stored.oauthSecret !== null } };\n if (oauthChanged(before, stored.server)) {\n // The tokens no longer fit the server: they are revoked and everyone connects again.\n stored.organization = null;\n stored.personal = null;\n } else if (oauth.authorization !== null && before.authorization?.issuer === oauth.authorization.issuer &&\n stored.organization?.status === 'issuer-changed') {\n stored.organization = { ...stored.organization, status: 'active' };\n }\n if (!secretModes.includes(input.authMode)) {\n stored.secret = null;\n stored.server.secretReference = null;\n } else if (input.secret) {\n stored.secret = input.secret;\n stored.server.secretReference = null;\n } else if (input.secret === '') {\n stored.secret = null;\n }\n if (input.secretReference && secretModes.includes(input.authMode)) {\n stored.secret = null;\n }\n return { status: 200, body: this.toServer(stored) };\n }\n if (method === 'DELETE') {\n this.servers.delete(id);\n this.context.removeServer(id);\n return { status: 204 };\n }\n return { status: 405 };\n }\n\n if (action === 'connection' && length === 4) {\n if (method !== 'GET' && method !== 'DELETE') {\n return { status: 405 };\n }\n // The organization connection exists for OAuth; for a server each person connects to these\n // endpoints act on the administrator's own connection, as the authorization does.\n if (!oauthModes.includes(stored.server.authMode)) {\n return failure('assistant-mcp-connection-not-supported');\n }\n const personal = isPersonalOAuth(stored.server);\n if (method === 'GET') {\n return { status: 200, body: (personal ? stored.personal : this.toServer(stored).organizationConnection) ?? notConnected() };\n }\n if (personal) {\n stored.personal = null;\n } else {\n stored.organization = null;\n }\n return { status: 204 };\n }\n if (action === 'connection' && child === 'authorize' && length === 5) {\n return method === 'POST' ? this.startAuthorization(stored, body) : { status: 405 };\n }\n if (action === 'connections' && length === 4) {\n if (method !== 'DELETE') {\n return { status: 405 };\n }\n // Personal connections exist only for a server each person connects to with OAuth.\n if (!isPersonalOAuth(stored.server)) {\n return failure('assistant-mcp-connection-not-supported');\n }\n stored.personal = null;\n return { status: 204 };\n }\n if (action === 'connections' && child === 'summary' && length === 5) {\n if (method !== 'GET') {\n return { status: 405 };\n }\n if (!isPersonalOAuth(stored.server)) {\n return failure('assistant-mcp-connection-not-supported');\n }\n // The mock has one person: the caller.\n const status = stored.personal?.status;\n return {\n status: 200,\n body: {\n active: status === 'active' ? 1 : 0,\n reauthorizationRequired: status === 'reauthorization-required' ? 1 : 0,\n issuerChanged: status === 'issuer-changed' ? 1 : 0\n }\n };\n }\n\n if (length === 4 && action === 'test' && method === 'POST') {\n const code = this.connectionFailure(stored);\n const result: McpServerTestResult = code\n ? { ok: false, code, toolCount: null }\n : { ok: true, code: null, toolCount: stored.remoteTools.length };\n stored.server = { ...stored.server, lastConnectAt: this.now(), lastConnectCode: code };\n return { status: 200, body: result };\n }\n if (length === 4 && action === 'sync' && method === 'POST') {\n const code = this.connectionFailure(stored);\n const syncedAt = this.now();\n stored.server = {\n ...stored.server,\n lastSyncAt: syncedAt,\n lastSyncStatus: code ? 'failed' : 'ok',\n lastConnectAt: syncedAt,\n lastConnectCode: code\n };\n if (code) {\n // The code's one status: a blocked host 400, a connection the server needs first 409, a\n // failure of the remote server 502.\n return failure(code);\n }\n this.sync(stored);\n return { status: 200, body: toTools(stored) };\n }\n if (length === 4 && action === 'tools' && method === 'GET') {\n return { status: 200, body: toTools(stored) };\n }\n if (length === 5 && action === 'tools' && method === 'PUT' && child !== undefined) {\n const tool = stored.tools.get(child);\n const input = body as { isEnabled?: unknown; effect?: unknown; descriptionOverride?: unknown } | undefined;\n if (!tool) {\n return failure('assistant-mcp-tool-not-found');\n }\n if (typeof input?.isEnabled !== 'boolean' || (input.effect !== 'read-only' && input.effect !== 'mutation') ||\n (input.descriptionOverride !== null && typeof input.descriptionOverride !== 'string')) {\n return validationFailure();\n }\n if (input.isEnabled && tool.status === 'missing') {\n return validationFailure('isEnabled');\n }\n\n const override = typeof input.descriptionOverride === 'string' && input.descriptionOverride.trim().length > 0\n ? input.descriptionOverride.slice(0, 1_000)\n : null;\n const updated = {\n ...tool,\n isEnabled: input.isEnabled,\n effect: input.effect as McpToolEffect,\n descriptionOverride: override,\n status: input.isEnabled && tool.status === 'schema-changed' ? 'available' as const : tool.status\n };\n stored.tools.set(child, updated);\n return { status: 200, body: toTool(updated) };\n }\n\n return failure('assistant-not-found');\n }\n\n private sync(stored: StoredServer): void {\n const seen = new Set<string>();\n for (const remote of stored.remoteTools) {\n seen.add(remote.remoteName);\n const existing = stored.tools.get(remote.remoteName);\n const description = remote.description.slice(0, 1_000);\n if (!existing) {\n stored.tools.set(remote.remoteName, {\n remoteName: remote.remoteName,\n localId: `mcp.${stored.server.id}.${kebab(remote.remoteName)}`,\n description,\n descriptionOverride: null,\n isEnabled: false,\n effect: 'mutation',\n status: 'available',\n readOnlyHint: remote.readOnlyHint ?? null,\n inputSchemaHash: remote.inputSchemaHash\n });\n continue;\n }\n\n const changed = existing.inputSchemaHash !== remote.inputSchemaHash;\n stored.tools.set(remote.remoteName, {\n ...existing,\n description,\n readOnlyHint: remote.readOnlyHint ?? null,\n inputSchemaHash: remote.inputSchemaHash,\n isEnabled: changed ? false : existing.isEnabled,\n status: changed ? 'schema-changed' : existing.status === 'missing' ? 'available' : existing.status\n });\n }\n\n for (const [name, tool] of stored.tools) {\n if (!seen.has(name)) {\n stored.tools.set(name, { ...tool, isEnabled: false, status: 'missing' });\n }\n }\n }\n\n /**\n * The field errors of a server change, as the server reports them in one refusal: the fields\n * themselves, the credential and the OAuth settings. Empty when the change is valid.\n */\n private fieldErrors(input: McpServerInput, stored: StoredServer | null): Record<string, string[]> {\n const errors: Record<string, string[]> = {};\n const add: AddFieldError = (field, value) => {\n if (!errors[field]) {\n errors[field] = [value];\n }\n };\n\n checkServerFields(input, stored, this.scenario.admin?.policies, add, this.scenario.admin?.mcpAuthModes ?? []);\n this.checkCredential(input, stored, add);\n this.checkOAuth(input, stored, add);\n checkReaders(input, stored, add);\n return errors;\n }\n\n /**\n * The OAuth settings of a server change, as on the server: the connection scope, the scopes, a\n * client id and secret where needed, the account label of an organization connection, and the\n * confirmation of discovery for a new server or a new address.\n */\n private checkOAuth(input: McpServerInput, stored: StoredServer | null, add: AddFieldError): void {\n if (!oauthModes.includes(input.authMode)) {\n return;\n }\n const scope = input.connectionScope ?? stored?.server.connectionScope ?? 'organization';\n if (!connectionScopes.includes(scope) || (input.authMode !== 'oauth' && scope !== 'organization')) {\n add('connectionScope', 'invalid');\n }\n const settings = stored?.server.oauth ?? null;\n const clientId = effective(input.oauth?.clientId, settings?.clientId ?? null);\n const scopes = effective(input.oauth?.scopes, settings?.scopes ?? null);\n const label = effective(input.oauth?.organizationAccountLabel, settings?.organizationAccountLabel ?? null);\n const reference = effective(input.oauth?.clientSecretReference, settings?.clientSecretReference ?? null);\n if (scopes !== null && (scopes.length > 1_024 || !scopeTokens.test(scopes.trim()))) {\n add('oauth.scopes', 'invalid');\n }\n if (clientId !== null && clientId.length > maxClientId) {\n add('oauth.clientId', 'too-long');\n }\n if (typeof input.oauth?.clientSecret === 'string' && input.oauth.clientSecret.length > maxSecret) {\n add('oauth.clientSecret', 'too-long');\n }\n if (input.authMode === 'oauth' && scope === 'organization') {\n if (label === null || label.trim().length === 0) {\n add('oauth.organizationAccountLabel', 'required');\n } else if (label.length > maxAccountLabel) {\n add('oauth.organizationAccountLabel', 'too-long');\n }\n }\n if (reference !== null && !input.oauth?.clientSecret) {\n if (!secretReference.test(reference) || reference.includes('..')) {\n add('oauth.clientSecretReference', 'invalid');\n } else if (!this.resolves(reference)) {\n add('oauth.clientSecretReference', 'not-found');\n }\n }\n if (input.authMode === 'oauth-client-credentials') {\n if (clientId === null || clientId.trim().length === 0) {\n add('oauth.clientId', 'required');\n }\n const hasSecret = input.oauth?.clientSecret === undefined || input.oauth?.clientSecret === null\n ? stored?.oauthSecret != null && !input.oauth?.clientSecretReference\n : input.oauth.clientSecret.length > 0;\n const certificate = input.clientCertificateReference === undefined || input.clientCertificateReference === null\n ? stored?.server.clientCertificateReference ?? null\n : input.clientCertificateReference || null;\n if (!hasSecret && reference === null && certificate === null) {\n add('oauth.clientSecret', 'required');\n }\n }\n const pinned = stored !== null && oauthModes.includes(stored.server.authMode) ? stored.server.authorization : null;\n if (input.oauth?.confirmAuthorization !== true && (pinned === null || stored!.server.url !== input.url.trim())) {\n add('oauth.confirmAuthorization', 'required');\n }\n }\n\n /**\n * The authorization an OAuth server change pins: the confirmed one it had, or what discovery finds\n * now when the administrator confirmed it. Discovery fails with its own code.\n */\n private confirmOAuth(input: McpServerInput, stored: StoredServer | null): { failure: NhAssistantMockResult } | { authorization: McpAuthorization | null } {\n if (!oauthModes.includes(input.authMode)) {\n return { authorization: null };\n }\n if (input.oauth?.confirmAuthorization !== true) {\n return { authorization: stored?.server.authorization ?? null };\n }\n const found = this.discovery(input.url.trim());\n if (typeof found === 'string') {\n return { failure: discoveryFailure(found) };\n }\n if (input.authMode === 'oauth' && !found.pkceSupported) {\n return { failure: failure('assistant-mcp-pkce-unsupported') };\n }\n return { authorization: { issuer: found.issuer, resource: found.resource, confirmedAt: this.now(), confirmedBy: 'current-user' } };\n }\n\n /** Whether a secret reference names an available secret: by default every `config:` one. */\n private resolves(reference: string): boolean {\n return this.scenario.admin?.secretReferences?.includes(reference) ?? reference.startsWith('config:');\n }\n\n /**\n * What discovery finds for an address: a host with `no-oauth` has no protected resource metadata,\n * `no-pkce` an authorization server without PKCE; `admin.mcpDiscovery` overrides per host.\n */\n private discovery(url: string): McpDiscovery | string {\n let parsed: URL;\n try {\n parsed = new URL(url);\n } catch {\n return 'assistant-validation';\n }\n const host = parsed.hostname.toLowerCase();\n if (host.startsWith('169.254.') || host.startsWith('[fe80') || host.includes('metadata')) {\n return 'assistant-mcp-host-blocked';\n }\n if (host.includes('no-oauth') || host.includes('unreachable')) {\n return 'assistant-mcp-discovery-failed';\n }\n const issuer = `https://auth.${host}`;\n const path = parsed.pathname.replace(/\\/+$/, '');\n return {\n resource: `${parsed.protocol}//${parsed.host.toLowerCase()}${path}${parsed.search}`,\n issuer,\n authorizationServers: [issuer],\n challengedScopes: ['mcp:read'],\n scopesSupported: ['mcp:read', 'mcp:write', 'offline_access'],\n grantTypesSupported: ['authorization_code', 'refresh_token', 'client_credentials'],\n pkceSupported: !host.includes('no-pkce'),\n clientIdMetadataDocumentSupported: false,\n dynamicRegistrationSupported: true,\n tokenEndpointAuthMethods: ['client_secret_basic', 'private_key_jwt', 'none'],\n ...this.scenario.admin?.mcpDiscovery?.[host]\n };\n }\n\n /** `POST admin/mcp-servers/{id}/connection/authorize`: starts the organization's authorization. */\n private startAuthorization(stored: StoredServer, body: unknown): NhAssistantMockResult {\n // Only an authorization by a person connects: client credentials connect without one.\n if (stored.server.authMode !== 'oauth') {\n return failure('assistant-mcp-connection-not-supported');\n }\n const returnUrl = (body as { returnUrl?: unknown } | undefined)?.returnUrl;\n if (returnUrl !== undefined && returnUrl !== null && !this.allowedReturnUrl(returnUrl)) {\n return validationFailure('returnUrl');\n }\n // For a server each person connects to, the administrator connects their own account.\n return this.startFlow(stored, stored.server.connectionScope === 'user' ? 'user' : 'organization', false);\n }\n\n private startFlow(stored: StoredServer, owner: 'organization' | 'user', allowBackgroundUse: boolean): NhAssistantMockResult {\n const authorization = stored.server.authorization;\n if (authorization === null) {\n return failure('assistant-mcp-authorization-not-confirmed');\n }\n const flowId = uuid();\n const expiresAt = Date.parse(this.now()) + flowLifetimeMs;\n this.flows.set(flowId, {\n serverId: stored.server.id,\n owner,\n completionCode: `mock-completion-${flowId.replace(/-/g, '')}`,\n status: 'pending',\n allowBackgroundUse,\n expiresAt\n });\n const query = new URLSearchParams({\n response_type: 'code',\n client_id: stored.server.oauth?.clientId ?? 'mock-registered-client',\n resource: authorization.resource,\n state: flowId\n });\n const start: McpAuthorizationStart = {\n flowId,\n authorizationUrl: `${authorization.issuer}/authorize?${query.toString()}`,\n expiresAt: new Date(expiresAt).toISOString(),\n callbackOrigin: 'https://assistant.mock.local'\n };\n return { status: 200, body: start };\n }\n\n /** `POST mcp-connections/complete`: activates the connection of a flow the caller started. */\n private complete(body: unknown): NhAssistantMockResult {\n const request = body as { flowId?: unknown; completionCode?: unknown } | undefined;\n if (typeof request?.flowId !== 'string' || request.flowId.length === 0) {\n return failure('assistant-validation', { flowId: ['required'] });\n }\n if (typeof request.completionCode !== 'string' || request.completionCode.length === 0) {\n return failure('assistant-validation', { completionCode: ['required'] });\n }\n const flow = this.flows.get(request.flowId);\n if (!flow || flow.status !== 'exchanged' || flow.expiresAt < Date.parse(this.now())) {\n return failure('assistant-mcp-authorization-expired');\n }\n if (flow.completionCode !== request.completionCode) {\n return failure('assistant-mcp-authorization-invalid');\n }\n if (flow.owner === 'organization' && !this.context.canAdminister()) {\n return failure('assistant-forbidden');\n }\n const stored = this.servers.get(flow.serverId);\n if (!stored) {\n return failure('assistant-mcp-server-not-found');\n }\n flow.status = 'completed';\n const connection = activeConnection(this.now(), 'current-user', stored.server.oauth?.scopes ?? null);\n if (flow.owner === 'user') {\n stored.personal = connection;\n if (flow.allowBackgroundUse) {\n this.consents.set(stored.server.id, { fingerprint: consentFingerprint(stored), consentedAt: this.now() });\n }\n } else {\n stored.organization = connection;\n }\n const completion: McpCompletion = { serverId: stored.server.id, ownerKind: flow.owner, status: 'active', grantedScopes: connection.grantedScopes };\n return { status: 200, body: completion };\n }\n\n /** By default every http(s) address; `admin.mcpReturnOrigins` limits the origins. */\n private allowedReturnUrl(value: unknown): boolean {\n if (typeof value !== 'string') {\n return false;\n }\n try {\n const url = new URL(value);\n const origins = this.scenario.admin?.mcpReturnOrigins;\n return (url.protocol === 'https:' || url.protocol === 'http:') && url.hash.length === 0 &&\n (origins === undefined || origins.includes(url.origin));\n } catch {\n return false;\n }\n }\n\n private connectionFailure(stored: StoredServer): string | null {\n const oauthFailure = this.oauthConnectionFailure(stored);\n if (oauthFailure !== undefined) {\n return oauthFailure;\n }\n let url: URL;\n try {\n url = new URL(stored.server.url);\n } catch {\n return 'assistant-mcp-unreachable';\n }\n\n const host = url.hostname.toLowerCase();\n if (host.startsWith('169.254.') || host.startsWith('[fe80') || host.includes('metadata')) {\n return 'assistant-mcp-host-blocked';\n }\n if (stored.server.authMode === 'forward-user-token' && !(this.scenario.admin?.forwardUserTokenHosts ?? []).includes(host)) {\n return 'assistant-mcp-host-blocked';\n }\n if (host.includes('unreachable')) {\n return 'assistant-mcp-unreachable';\n }\n if (secretModes.includes(stored.server.authMode) && !stored.secret && !stored.server.secretReference) {\n return 'assistant-mcp-unauthorized';\n }\n return null;\n }\n\n /**\n * The state of an OAuth server's organization connection for a test or sync: client credentials\n * connect on first use; an authorization needs an administrator to connect first. `undefined` for\n * servers without OAuth.\n */\n private oauthConnectionFailure(stored: StoredServer): string | null | undefined {\n const server = stored.server;\n if (!oauthModes.includes(server.authMode)) {\n return undefined;\n }\n if (server.authorization === null) {\n return 'assistant-mcp-authorization-not-confirmed';\n }\n if (server.authMode === 'oauth-client-credentials' && stored.organization === null) {\n stored.organization = activeConnection(this.now(), 'client-credentials', server.oauth?.scopes ?? null);\n }\n if (server.authMode === 'oauth' && server.connectionScope === 'user') {\n // Tests and syncs of a server each person connects to use the administrator's own account.\n switch (stored.personal?.status ?? 'not-connected') {\n case 'not-connected':\n return 'assistant-mcp-connection-required';\n case 'reauthorization-required':\n return 'assistant-mcp-reauthorization-required';\n case 'issuer-changed':\n return 'assistant-mcp-issuer-changed';\n default:\n return null;\n }\n }\n switch (stored.organization?.status ?? 'not-connected') {\n case 'not-connected':\n return 'assistant-mcp-connection-required';\n case 'reauthorization-required':\n return 'assistant-mcp-reauthorization-required';\n case 'issuer-changed':\n return 'assistant-mcp-issuer-changed';\n default:\n return null;\n }\n }\n\n /**\n * The field errors of the input's credential: a basic user name, a secret or a reference that names\n * an available secret, and a configured client certificate. A reference or certificate the\n * application cannot resolve is the field error `not-found`.\n */\n private checkCredential(input: McpServerInput, stored: StoredServer | null, add: AddFieldError): void {\n const admin = this.scenario.admin ?? {};\n const userName = input.userName ?? stored?.server.userName ?? null;\n if (input.authMode === 'basic' && (!userName || userName.trim().length === 0)) {\n add('userName', 'required');\n } else if (userName && (userName.length > maxUserName || userName.includes(':'))) {\n add('userName', 'invalid');\n }\n if (typeof input.secret === 'string' && input.secret.length > maxSecret) {\n add('secret', 'too-long');\n }\n if (input.secret && input.secretReference) {\n add('secretReference', 'invalid');\n }\n const reference = input.secretReference === undefined || input.secretReference === null\n ? (input.secret ? null : stored?.server.secretReference ?? null)\n : input.secretReference || null;\n if (reference !== null && (!secretReference.test(reference) || reference.includes('..'))) {\n add('secretReference', 'invalid');\n }\n if (secretModes.includes(input.authMode)) {\n // As on the server: bearer, api-key and basic need a stored secret or a reference. A new stored\n // secret replaces a reference, a new reference a stored secret.\n const storedSecret = input.secret === undefined || input.secret === null\n ? !!stored?.secret && !input.secretReference\n : input.secret.length > 0;\n if (!storedSecret && (reference === null || !!input.secret)) {\n add('secret', 'required');\n }\n if (reference !== null && !input.secret && !this.resolves(reference)) {\n add('secretReference', 'not-found');\n }\n }\n const certificate = input.clientCertificateReference === undefined || input.clientCertificateReference === null\n ? stored?.server.clientCertificateReference ?? null\n : input.clientCertificateReference || null;\n if (certificate !== null && !certificateName.test(certificate)) {\n add('clientCertificateReference', 'invalid');\n } else if (certificate !== null && !(admin.clientCertificates ?? []).includes(certificate)) {\n add('clientCertificateReference', 'not-found');\n }\n }\n\n /** Servers with the caller's own account for background runs, on an agent the caller may use. */\n private personalServers(): McpConnection[] {\n const visible = new Set(this.context.chatAgentIds());\n const agents = this.context.agents();\n const result: McpConnection[] = [];\n for (const stored of this.servers.values()) {\n const server = stored.server;\n const agentIds = agents\n .filter(agent => visible.has(agent.id) && agent.mcpServerIds.includes(server.id))\n .map(agent => agent.id);\n const personalOAuth = server.authMode === 'oauth' && server.connectionScope === 'user';\n const forwardsToken = server.headlessUse === 'personal' &&\n (server.authMode === 'forward-user-token' || customOwnership(this.scenario, server.authMode) === 'person');\n if (!server.isEnabled || !(personalOAuth || forwardsToken) || agentIds.length === 0) {\n continue;\n }\n const consent = this.consents.get(server.id);\n const allowed = consent !== undefined && consent.fingerprint === consentFingerprint(stored);\n let host = '';\n try {\n host = new URL(server.url).hostname;\n } catch {\n host = '';\n }\n result.push({\n serverId: server.id,\n displayName: server.displayName,\n host,\n allowBackgroundUse: allowed,\n consentedAt: allowed ? consent.consentedAt : null,\n agentIds,\n connectionStatus: personalOAuth ? stored.personal?.status ?? 'not-connected' : null,\n grantedScopes: personalOAuth ? stored.personal?.grantedScopes ?? null : null,\n requiredScopes: personalOAuth ? stored.personal?.requiredScopes ?? null : null,\n connectedAt: personalOAuth ? stored.personal?.connectedAt ?? null : null,\n offersBackgroundUse: server.headlessUse === 'personal'\n });\n }\n return result;\n }\n\n private toServer(stored: StoredServer): McpServer {\n const server = stored.server;\n const organizationCredential = server.authMode === 'oauth-client-credentials' ||\n (server.authMode === 'oauth' && server.connectionScope === 'organization');\n return {\n ...stored.server,\n organizationConnection: organizationCredential ? stored.organization ?? notConnected() : null,\n hasSecret: stored.secret !== null,\n assignedAgentIds: this.context.agents()\n .filter(agent => agent.mcpServerIds.includes(stored.server.id))\n .map(agent => agent.id)\n };\n }\n}\n\nfunction toServerFields(\n input: McpServerInput,\n stored?: Omit<McpServer, 'hasSecret' | 'assignedAgentIds' | 'organizationConnection'>\n): Pick<McpServer, 'id' | 'displayName' | 'url' | 'authMode' | 'headerName' | 'requiredPolicy' | 'isEnabled' | 'userName' | 'secretReference' | 'clientCertificateReference'> {\n const usesSecret = secretModes.includes(input.authMode);\n const reference = input.secretReference === undefined || input.secretReference === null\n ? (input.secret ? null : stored?.secretReference ?? null)\n : input.secretReference || null;\n const certificate = input.clientCertificateReference === undefined || input.clientCertificateReference === null\n ? stored?.clientCertificateReference ?? null\n : input.clientCertificateReference || null;\n return {\n id: input.id,\n displayName: input.displayName,\n url: input.url,\n authMode: input.authMode,\n headerName: input.authMode === 'api-key' ? (input.headerName || 'X-Api-Key') : null,\n requiredPolicy: input.requiredPolicy,\n isEnabled: input.isEnabled,\n userName: input.authMode === 'basic' ? (input.userName ?? stored?.userName ?? null)?.trim() ?? null : null,\n secretReference: usesSecret ? reference : null,\n clientCertificateReference: certificate\n };\n}\n\n/**\n * The OAuth fields of a server after an input: the connection scope, the settings without the\n * client secret, and the confirmed authorization.\n */\nfunction oauthFields(\n input: McpServerInput,\n stored: Omit<McpServer, 'hasSecret' | 'assignedAgentIds' | 'organizationConnection'> | null,\n authorization: McpAuthorization | null\n): Pick<McpServer, 'connectionScope' | 'oauth' | 'authorization'> {\n if (!oauthModes.includes(input.authMode)) {\n return { connectionScope: 'organization', oauth: null, authorization: null };\n }\n const settings = stored?.oauth ?? null;\n const scope = input.authMode === 'oauth' ? input.connectionScope ?? stored?.connectionScope ?? 'organization' : 'organization';\n const clientId = effective(input.oauth?.clientId, settings?.clientId ?? null)?.trim() || null;\n const scopes = effective(input.oauth?.scopes, settings?.scopes ?? null)?.trim() || null;\n const label = input.authMode === 'oauth' && scope === 'organization'\n ? effective(input.oauth?.organizationAccountLabel, settings?.organizationAccountLabel ?? null)?.trim() || null\n : null;\n const reference = clientId === null || input.oauth?.clientSecret\n ? null\n : effective(input.oauth?.clientSecretReference, settings?.clientSecretReference ?? null) || null;\n return {\n connectionScope: scope,\n oauth: {\n clientId,\n hasClientSecret: clientId !== null && (!!input.oauth?.clientSecret || (input.oauth?.clientSecret !== '' && reference === null && (settings?.hasClientSecret ?? false))),\n clientSecretReference: reference,\n scopes: scopes === null ? null : scopes.split(' ').filter(Boolean).join(' '),\n organizationAccountLabel: label\n },\n authorization\n };\n}\n\n/** Whether a change makes the server's stored tokens unusable. */\nfunction oauthChanged(\n before: Omit<McpServer, 'hasSecret' | 'assignedAgentIds' | 'organizationConnection'>,\n after: Omit<McpServer, 'hasSecret' | 'assignedAgentIds' | 'organizationConnection'>\n): boolean {\n return before.url !== after.url || before.authMode !== after.authMode || before.connectionScope !== after.connectionScope ||\n before.authorization?.issuer !== after.authorization?.issuer || before.oauth?.scopes !== after.oauth?.scopes ||\n before.oauth?.clientId !== after.oauth?.clientId;\n}\n\n/** The value after an input: undefined or null keeps the stored value, `\"\"` clears it. */\nfunction effective(input: string | null | undefined, stored: string | null): string | null {\n if (input === undefined || input === null) {\n return stored;\n }\n return input.length === 0 ? null : input;\n}\n\nfunction notConnected(): McpOrganizationConnection {\n return { status: 'not-connected', connectedAt: null, connectedBy: null, grantedScopes: null, requiredScopes: null, accessTokenExpiresAt: null, lastFailureCode: null };\n}\n\nfunction activeConnection(now: string, connectedBy: string, scopes: string | null): McpOrganizationConnection {\n return {\n status: 'active',\n connectedAt: now,\n connectedBy,\n grantedScopes: scopes ?? 'mcp:read',\n requiredScopes: null,\n accessTokenExpiresAt: new Date(Date.parse(now) + 3_600_000).toISOString(),\n lastFailureCode: null\n };\n}\n\n/** The refusal of a discovery: an address that is no URL at its field, otherwise the discovery's code. */\nfunction discoveryFailure(code: string): NhAssistantMockResult {\n return code === 'assistant-validation' ? failure(code, { url: ['invalid'] }) : failure(code);\n}\n\n/** A server each person connects to with OAuth: the only kind with personal connections. */\nfunction isPersonalOAuth(server: Pick<McpServer, 'authMode' | 'connectionScope'>): boolean {\n return server.authMode === 'oauth' && server.connectionScope === 'user';\n}\n\nfunction uuid(): string {\n return globalThis.crypto?.randomUUID?.() ?? 'xxxxxxxx-xxxx-4xxx-8xxx-xxxxxxxxxxxx'.replace(/x/g, () => Math.floor(Math.random() * 16).toString(16));\n}\n\n/** What a person's consent holds for: the server, its address and its authentication. */\nfunction consentFingerprint(stored: StoredServer): string {\n return [stored.server.id, stored.server.url.trim(), stored.server.authMode, stored.server.authorization?.issuer ?? '', stored.server.oauth?.scopes ?? ''].join('\\n');\n}\n\n/** The state of a server that was just added: never in headless runs unless the input says so. */\nfunction newServerState(input: McpServerInput): Pick<McpServer, 'lastSyncAt' | 'lastSyncStatus' | 'headlessUse' | 'lastConnectAt' | 'lastConnectCode' | 'transport' | 'readers'> {\n return {\n lastSyncAt: null,\n lastSyncStatus: null,\n headlessUse: input.headlessUse ?? 'never',\n lastConnectAt: null,\n lastConnectCode: null,\n transport: input.transport ?? 'streamable-http',\n // A new server has no synced tools, so it gets its readers after a sync.\n readers: []\n };\n}\n\n/** A media type in lowercase without parameters, or null for a value that is not one. */\nfunction normalizeMediaType(value: unknown): string | null {\n if (typeof value !== 'string') {\n return null;\n }\n const essence = value.split(';')[0].trim().toLowerCase();\n return essence.length <= 128 && mediaTypePattern.test(essence) ? essence : null;\n}\n\n/**\n * The readers after a valid input, as on the server: omitted or null readers keep the stored ones,\n * an empty list removes them all, and the media types are stored normalized and once each. The\n * server returns them by priority, highest first, then by tool name.\n */\nfunction readersAfter(input: McpServerInput, stored: McpReader[]): McpReader[] {\n const readers = input.readers;\n if (readers === undefined || readers === null) {\n return stored;\n }\n return readers\n .map(reader => ({\n mediaTypes: [...new Set(reader.mediaTypes.map(normalizeMediaType).filter((mediaType): mediaType is string => mediaType !== null))],\n toolName: reader.toolName ?? '',\n maxClassification: reader.maxClassification ?? 'restricted',\n priority: reader.priority ?? 0\n }))\n .sort((left, right) => right.priority - left.priority || compareOrdinal(left.toolName, right.toolName));\n}\n\n/**\n * The field errors of the readers, as the server reports them: `readers` (too-long for more than\n * 16) and per reader, with its index: `readers[0].mediaTypes` (required, invalid, too-long for more\n * than 16), `readers[0].toolName` (required, invalid also for a second reader of the same tool,\n * not-found when the server has not synced that tool), `readers[0].maxClassification` (required,\n * invalid) and `readers[0].priority` (invalid outside -1000 to 1000).\n */\nfunction checkReaders(input: McpServerInput, stored: StoredServer | null, add: AddFieldError): void {\n const readers = input.readers;\n if (!Array.isArray(readers) || readers.length === 0) {\n return;\n }\n if (readers.length > maxReaders) {\n add('readers', 'too-long');\n return;\n }\n\n const readTools = new Set<string>();\n readers.forEach((reader, index) => {\n const field = (name: string) => `readers[${index}].${name}`;\n const mediaTypes = Array.isArray(reader?.mediaTypes) ? reader.mediaTypes.map(normalizeMediaType) : [];\n if (mediaTypes.length === 0) {\n add(field('mediaTypes'), 'required');\n } else if (mediaTypes.some(mediaType => mediaType === null)) {\n add(field('mediaTypes'), 'invalid');\n } else if (new Set(mediaTypes).size > maxReaderMediaTypes) {\n add(field('mediaTypes'), 'too-long');\n }\n\n const toolName = reader?.toolName;\n if (typeof toolName !== 'string' || toolName.trim().length === 0) {\n add(field('toolName'), 'required');\n } else if (toolName.length > maxReaderToolName || controlCharacters.test(toolName) || readTools.has(toolName)) {\n add(field('toolName'), 'invalid');\n } else if (!stored?.tools.has(toolName)) {\n add(field('toolName'), 'not-found');\n }\n if (typeof toolName === 'string') {\n readTools.add(toolName);\n }\n\n const classification = reader?.maxClassification;\n if (classification === null || classification === undefined) {\n add(field('maxClassification'), 'required');\n } else if (!classifications.includes(classification)) {\n add(field('maxClassification'), 'invalid');\n }\n\n const priority = reader?.priority ?? 0;\n if (!Number.isInteger(priority) || priority < readerPriority.min || priority > readerPriority.max) {\n add(field('priority'), 'invalid');\n }\n });\n}\n\n/** Compares two names by their characters, as the server orders them. */\nfunction compareOrdinal(left: string, right: string): number {\n return left < right ? -1 : left > right ? 1 : 0;\n}\n\n/**\n * `organization` needs a credential of the organization; `personal` is the forwarded token of the\n * person a run acts for.\n */\nfunction fitsHeadlessUse(\n headlessUse: McpHeadlessUse,\n authMode: McpAuthMode,\n connectionScope: McpConnectionScope = 'organization',\n customModes: readonly McpCustomAuthMode[] = []\n): boolean {\n const custom = customModes.find(item => item.mode === authMode);\n const personal = custom ? custom.ownership === 'person' : authMode === 'forward-user-token' || (authMode === 'oauth' && connectionScope === 'user');\n return headlessUse === 'never'\n || (headlessUse === 'organization' && !personal)\n || (headlessUse === 'personal' && personal);\n}\n\n/** Whose credential an authentication mode the application registered sends; null for a built-in mode. */\nfunction customOwnership(scenario: NhAssistantMockScenario, authMode: McpAuthMode): McpCustomAuthMode['ownership'] | null {\n return scenario.admin?.mcpAuthModes?.find(item => item.mode === authMode)?.ownership ?? null;\n}\n\n/** A body the server can read as a server at all; its fields are checked one by one afterwards. */\nfunction isServerInput(input: McpServerInput | undefined): input is McpServerInput {\n return !!input && typeof input === 'object' && typeof input.isEnabled === 'boolean';\n}\n\n/**\n * The field errors of a server's own fields, as the server reports them: `id` (invalid, too-long),\n * `displayName` (required, too-long), `url` (required, invalid, too-long), `authMode`, `headerName`,\n * `transport` and `headlessUse` (invalid) and `requiredPolicy` (invalid, not-found).\n */\nfunction checkServerFields(\n input: McpServerInput,\n stored: StoredServer | null,\n policies: readonly string[] | undefined,\n add: AddFieldError,\n customModes: readonly McpCustomAuthMode[]\n): void {\n if (typeof input.id !== 'string' || (stored === null && !mockDashCase.test(input.id))) {\n add('id', 'invalid');\n } else if (input.id.length > maxServerId) {\n add('id', 'too-long');\n }\n\n if (typeof input.displayName !== 'string' || input.displayName.trim().length === 0) {\n add('displayName', 'required');\n } else if (input.displayName.length > maxDisplayName) {\n add('displayName', 'too-long');\n }\n\n if (typeof input.url !== 'string' || input.url.trim().length === 0) {\n add('url', 'required');\n } else if (input.url.length > maxUrl) {\n add('url', 'too-long');\n } else if (!allowedServerUrl(input.url)) {\n add('url', 'invalid');\n }\n\n if (!authModes.includes(input.authMode) && !customModes.some(item => item.mode === input.authMode)) {\n add('authMode', 'invalid');\n }\n const header = input.headerName?.trim() ?? '';\n if (input.authMode === 'api-key' && header.length > 0 && !headerName.test(header)) {\n add('headerName', 'invalid');\n }\n if (input.transport !== undefined && input.transport !== null && !transports.includes(input.transport)) {\n add('transport', 'invalid');\n }\n\n // An omitted headless use or connection scope keeps the stored value, as on the server.\n const headlessUse = input.headlessUse ?? stored?.server.headlessUse ?? 'never';\n const connectionScope = input.connectionScope ?? stored?.server.connectionScope ?? 'organization';\n if (!headlessUses.includes(headlessUse) || !fitsHeadlessUse(headlessUse, input.authMode, connectionScope, customModes)) {\n add('headlessUse', 'invalid');\n }\n\n const policy = input.requiredPolicy;\n if (policy !== null && policy !== undefined) {\n if (typeof policy !== 'string' || policy.trim().length === 0 || policy.length > maxPolicy) {\n add('requiredPolicy', 'invalid');\n } else if (policies !== undefined && !policies.includes(policy)) {\n add('requiredPolicy', 'not-found');\n }\n }\n}\n\nfunction allowedServerUrl(value: string): boolean {\n try {\n const url = new URL(value);\n return url.protocol === 'https:' || (url.protocol === 'http:' && url.hostname === 'localhost');\n } catch {\n return false;\n }\n}\n\nfunction toTool({ inputSchemaHash, ...tool }: McpTool & { inputSchemaHash: string }): McpTool {\n return tool;\n}\n\nfunction toTools(stored: StoredServer): McpTool[] {\n return [...stored.tools.values()].map(toTool);\n}\n\nfunction kebab(value: string): string {\n return value\n .replace(/([a-z0-9])([A-Z])/g, '$1-$2')\n .replace(/[^A-Za-z0-9]+/g, '-')\n .replace(/^-+|-+$/g, '')\n .toLowerCase();\n}\n","import {\n AdminAgent,\n AgentAccountability,\n ApprovalPolicySummary,\n CodeConsultation,\n ConsultationCeiling,\n ConsultationSubjectRole,\n DataConsultation,\n DataConsultationRequest,\n NhAssistantConsultationRoute,\n RunConfigurationProblem,\n ToolCatalogEntry\n} from '@newheap/platform-ai-chat';\nimport { NhAssistantMockAdminAgent, NhAssistantMockConsultationCeiling } from './nh-assistant-mock.models';\nimport { NhAssistantMockResult, mockFailure as failure, mockHashText as hashText, mockMaxStateReason as maxReason } from './nh-assistant-mock-admin-shared';\nimport { mockSystemSubjectType, mockWorksOnCovers } from './nh-assistant-mock-works-on';\n\n/** What the consultations read of the mock's agents, their run configuration and the run catalog. */\nexport interface NhAssistantMockConsultationRules {\n find(agentId: string): AdminAgent | undefined;\n /** Every agent, to tell which of them select a consultation's tool. */\n all(): AdminAgent[];\n /** The subject types with an access resolver: the scenario's types and the whole application. */\n knownSubjectTypes(): string[];\n /** An agent in code has a run configuration; one created in the administration once it has run settings. */\n isConfigured(agent: AdminAgent): boolean;\n /** Whom the agent answers to, from its run settings as data or its code; `null` while it has none. */\n accountabilityOf(agent: AdminAgent): AgentAccountability | null;\n /** The agent's own approval policy; `null` for the platform's default. */\n approvalPolicyOf(agent: AdminAgent): string | null;\n approvalPolicies(): string[];\n approvalPolicySummaries(): ApprovalPolicySummary[];\n /** The policies administrators may choose as the asker policy, by name. */\n agentPolicyNames(): string[];\n}\n\n/** A consultation defined as data as the mock stores it. */\ninterface StoredConsultation {\n agentId: string;\n subjectType: string;\n version: number;\n description: string;\n instructions: string | null;\n minimumRole: ConsultationSubjectRole;\n askerPolicy: string | null;\n routes: NhAssistantConsultationRoute[];\n proposalRole: ConsultationSubjectRole;\n proposalPolicy: string | null;\n maxToolCalls: number;\n timeoutSeconds: number;\n maxAnswerChars: number;\n maxHistoryMessages: number;\n allowRequests: boolean;\n exposeToMcp: boolean;\n dataClassification: DataConsultation['dataClassification'];\n createdAt: string;\n createdBy: string;\n changedAt: string;\n changedBy: string;\n reason: string | null;\n}\n\n/** What is in effect of a stored consultation: nothing with the problem that keeps it out, or the parts that still fit. */\ninterface ConsultationCheck {\n inEffect: boolean;\n problems: string[];\n routes: NhAssistantConsultationRoute[];\n allowRequests: boolean;\n}\n\n/** The bounds of `AllowConsultation`, within which a ceiling may only lower the maxima. */\nconst bounds = {\n toolCalls: { min: 0, max: 32, initial: 4 },\n timeoutSeconds: { min: 1, max: 600, initial: 60 },\n answerChars: { min: 200, max: 32_000, initial: 4_000 },\n history: { min: 0, max: 200, initial: 20 }\n} as const;\n\nconst maxDescription = 1_000;\nconst maxInstructions = 4_000;\nconst maxConsultations = 20;\nconst roles: readonly ConsultationSubjectRole[] = ['reader', 'participant', 'approver'];\nconst allRoutes: readonly NhAssistantConsultationRoute[] = ['asker-decides', 'subject-agent-rights', 'subject-asker-rights'];\nconst classifications = ['public', 'internal', 'confidential', 'restricted'];\nconst subjectTypePattern = /^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/;\n\n/**\n * Consultations of the mock API's agents: those in code from the scenario, read-only, and those\n * defined as data, saved and removed as on the server within the ceilings in code\n * (`consultationsAsData` for the application, `consultableAsData` for an agent in code). A save\n * checks a consultation as the server does and refuses with the same codes and field errors; every\n * read checks it again, so a consultation that no longer fits, for example after the run settings\n * changed whom the agent answers to, stays with its problems. Data consultations in effect generate\n * their consult and request tools in the tool list and count for the agent's route switches.\n */\nexport class NhAssistantMockConsultations {\n private readonly stored = new Map<string, StoredConsultation>();\n private readonly codeAllowed = new Map<string, Partial<Record<NhAssistantConsultationRoute, string[]>>>();\n private readonly codeDescriptions = new Map<string, Record<string, string>>();\n private readonly agentCeilings = new Map<string, NhAssistantMockConsultationCeiling>();\n\n /** The application's ceiling; `null` while consultations exist in code only. */\n readonly applicationCeiling: ConsultationCeiling | null;\n\n constructor(\n application: NhAssistantMockConsultationCeiling | undefined,\n agents: readonly NhAssistantMockAdminAgent[],\n private readonly rules: NhAssistantMockConsultationRules,\n private readonly now: () => string\n ) {\n this.applicationCeiling = application ? ceilingOf(application) : null;\n for (const agent of agents) {\n if (agent.source !== 'code') {\n continue;\n }\n if (agent.consultations !== undefined || agent.consultationDescriptions !== undefined) {\n this.codeAllowed.set(agent.id, agent.consultations ?? {});\n this.codeDescriptions.set(agent.id, agent.consultationDescriptions ?? {});\n }\n if (agent.consultableAsData !== undefined) {\n this.agentCeilings.set(agent.id, agent.consultableAsData);\n }\n }\n }\n\n /**\n * The ceiling of the agent: the application's for an agent created in the administration, the\n * application's and its own together for a consultable agent in code, none otherwise.\n */\n ceilingOf(agent: AdminAgent): ConsultationCeiling | null {\n const application = this.applicationCeiling;\n if (!application) {\n return null;\n }\n if (agent.source === 'admin') {\n return application;\n }\n const own = this.agentCeilings.get(agent.id);\n if (!own) {\n return null;\n }\n const narrowed = ceilingOf(own);\n return {\n ...application,\n routes: application.routes.filter(route => narrowed.routes.includes(route)),\n allowRequests: application.allowRequests && narrowed.allowRequests,\n allowMcp: application.allowMcp && narrowed.allowMcp,\n maxToolCalls: Math.min(application.maxToolCalls, narrowed.maxToolCalls),\n maxTimeoutSeconds: Math.min(application.maxTimeoutSeconds, narrowed.maxTimeoutSeconds),\n maxAnswerChars: Math.min(application.maxAnswerChars, narrowed.maxAnswerChars),\n maxHistoryMessages: Math.min(application.maxHistoryMessages, narrowed.maxHistoryMessages)\n };\n }\n\n /** The agent's consultations in code, by subject type. */\n codeConsultations(agent: AdminAgent): CodeConsultation[] {\n const allowed = this.codeAllowed.get(agent.id);\n if (!allowed) {\n return [];\n }\n const descriptions = this.codeDescriptions.get(agent.id) ?? {};\n const types = new Set([...Object.values(allowed).flat(), ...Object.keys(descriptions)]);\n return [...types].sort().map(subjectType => {\n const consultToolId = consultToolOf(agent.id, subjectType);\n return {\n subjectType,\n description: descriptions[subjectType] ?? null,\n allowedRoutes: allRoutes.filter(route => (allowed[route] ?? []).includes(subjectType)),\n allowRequests: false,\n exposure: ['local', 'agent'],\n consultToolId,\n requestToolId: null,\n askingAgents: this.askersOf(agent.id, consultToolId)\n };\n });\n }\n\n /** The agent's consultations defined as data, by subject type, each with what is in effect of it. */\n dataConsultations(agent: AdminAgent): DataConsultation[] {\n return this.storedOf(agent.id).map(stored => this.toConsultation(agent, stored));\n }\n\n /** The problems of kind `consultation` of the agent's data consultations. */\n problems(agent: AdminAgent): RunConfigurationProblem[] {\n return this.storedOf(agent.id).flatMap(stored => this.check(agent, stored).problems.map(code => ({\n agentId: agent.id,\n kind: 'consultation' as const,\n id: stored.subjectType,\n code\n })));\n }\n\n /** The agent's data consultations in effect with their routes in effect, for its route switches. */\n inEffect(agentId: string): { subjectType: string; routes: NhAssistantConsultationRoute[] }[] {\n const agent = this.rules.find(agentId);\n if (!agent) {\n return [];\n }\n return this.storedOf(agentId)\n .map(stored => ({ subjectType: stored.subjectType, check: this.check(agent, stored) }))\n .filter(item => item.check.inEffect)\n .map(item => ({ subjectType: item.subjectType, routes: item.check.routes }));\n }\n\n /** Whether data consultations belong to the agent, which keeps its run settings. */\n has(agentId: string): boolean {\n return this.storedOf(agentId).length > 0;\n }\n\n /** The generated tools of the data consultations in effect, as `GET admin/tools` lists them. */\n tools(): ToolCatalogEntry[] {\n const tools: ToolCatalogEntry[] = [];\n for (const stored of [...this.stored.values()].sort((left, right) => key(left.agentId, left.subjectType).localeCompare(key(right.agentId, right.subjectType)))) {\n const agent = this.rules.find(stored.agentId);\n const check = agent ? this.check(agent, stored) : null;\n if (!check?.inEffect) {\n continue;\n }\n tools.push({ id: consultToolOf(stored.agentId, stored.subjectType), source: 'local', effect: 'read-only', description: stored.description, subjectType: null });\n if (check.allowRequests) {\n tools.push({ id: requestToolOf(stored.agentId, stored.subjectType), source: 'local', effect: 'idempotent-mutation', description: stored.description, subjectType: null });\n }\n }\n return tools;\n }\n\n /** `PUT` and `DELETE admin/agents/{id}/consultations/{subjectType}`. */\n handle(method: string, agent: AdminAgent, subjectType: string, body: unknown, query: URLSearchParams): NhAssistantMockResult {\n if (method === 'DELETE') {\n return this.remove(agent, subjectType, query);\n }\n return method === 'PUT' ? this.save(agent, subjectType, body) : { status: 405 };\n }\n\n private save(agent: AdminAgent, subjectType: string, body: unknown): NhAssistantMockResult {\n const request = (body ?? {}) as DataConsultationRequest;\n const reason = text(request.reason);\n if (reason !== null && reason.length > maxReason) {\n return failure('assistant-validation', { reason: ['too-long'] });\n }\n const ceiling = this.ceilingOf(agent);\n if (!ceiling) {\n return failure('assistant-consultations-not-allowed');\n }\n if (!this.rules.isConfigured(agent)) {\n return failure('assistant-agent-not-configured');\n }\n if (this.inCode(agent.id, subjectType)) {\n return failure('assistant-consultation-in-code');\n }\n\n // A new consultation starts with the defaults of code, capped by the ceiling.\n const description = text(request.description);\n const instructions = text(request.instructions);\n const minimumRole = (text(request.minimumRole) ?? 'reader') as ConsultationSubjectRole;\n const proposalRole = (text(request.proposalRole) ?? 'participant') as ConsultationSubjectRole;\n const routes = (request.routes ?? []).map(route => (typeof route === 'string' ? route.trim() : '')) as NhAssistantConsultationRoute[];\n const classification = text(request.dataClassification);\n const limits = {\n maxToolCalls: request.maxToolCalls ?? Math.min(bounds.toolCalls.initial, ceiling.maxToolCalls),\n timeoutSeconds: request.timeoutSeconds ?? Math.min(bounds.timeoutSeconds.initial, ceiling.maxTimeoutSeconds),\n maxAnswerChars: request.maxAnswerChars ?? Math.min(bounds.answerChars.initial, ceiling.maxAnswerChars),\n maxHistoryMessages: request.maxHistoryMessages ?? Math.min(bounds.history.initial, ceiling.maxHistoryMessages)\n };\n const errors: Record<string, string[]> = {};\n const add = (field: string, code: string): void => {\n errors[field] = [...(errors[field] ?? []), code];\n };\n if (!subjectTypePattern.test(subjectType)) {\n add('subjectType', 'invalid');\n }\n if (description === null) {\n add('description', 'required');\n } else if (description.length > maxDescription) {\n add('description', 'too-long');\n }\n if ((instructions ?? '').length > maxInstructions) {\n add('instructions', 'too-long');\n }\n if (!roles.includes(minimumRole)) {\n add('minimumRole', 'invalid');\n }\n if (!roles.includes(proposalRole)) {\n add('proposalRole', 'invalid');\n }\n if (!validRoutes(routes)) {\n add('routes', 'invalid');\n }\n if (!within(limits.maxToolCalls, bounds.toolCalls)\n || !within(limits.timeoutSeconds, bounds.timeoutSeconds)\n || !within(limits.maxAnswerChars, bounds.answerChars)\n || !within(limits.maxHistoryMessages, bounds.history)) {\n add('limits', 'invalid');\n }\n if (classification !== null && !classifications.includes(classification)) {\n add('dataClassification', 'invalid');\n }\n if (Object.keys(errors).length > 0) {\n return failure('assistant-validation', errors);\n }\n\n const existing = this.stored.get(key(agent.id, subjectType));\n const now = this.now();\n const row: StoredConsultation = {\n agentId: agent.id,\n subjectType,\n version: (existing?.version ?? 0) + 1,\n description: description!,\n instructions,\n minimumRole,\n askerPolicy: text(request.askerPolicy),\n routes,\n proposalRole,\n proposalPolicy: text(request.proposalPolicy),\n ...limits,\n allowRequests: request.allowRequests === true,\n exposeToMcp: request.exposeToMcp === true,\n dataClassification: classification as DataConsultation['dataClassification'],\n createdAt: existing?.createdAt ?? now,\n createdBy: existing?.createdBy ?? 'current-user',\n changedAt: now,\n changedBy: 'current-user',\n reason\n };\n\n // The same check as every read, refused here instead of degraded.\n const check = this.check(agent, row);\n if (check.problems.length > 0) {\n return fieldFailure(check.problems);\n }\n if (request.expectedVersion == null && !existing && this.storedOf(agent.id).length >= maxConsultations) {\n return failure('assistant-configuration-limit');\n }\n if ((request.expectedVersion ?? null) !== (existing?.version ?? null)) {\n return failure('assistant-version-conflict');\n }\n\n this.stored.set(key(agent.id, subjectType), row);\n return { status: 200, body: this.toConsultation(agent, row) };\n }\n\n private remove(agent: AdminAgent, subjectType: string, query: URLSearchParams): NhAssistantMockResult {\n const reason = query.get('reason');\n if (reason !== null && reason.trim().length > maxReason) {\n return failure('assistant-validation', { reason: ['too-long'] });\n }\n if (this.inCode(agent.id, subjectType)) {\n return failure('assistant-consultation-in-code');\n }\n const existing = this.stored.get(key(agent.id, subjectType));\n if (!existing) {\n return failure('assistant-consultation-not-found');\n }\n const expected = query.get('expectedVersion');\n if (expected !== null && Number(expected) !== existing.version) {\n return failure('assistant-version-conflict');\n }\n\n this.stored.delete(key(agent.id, subjectType));\n return { status: 204 };\n }\n\n /**\n * Checks a consultation against the ceilings and the agent as the server does on save and on every\n * load: out of effect when the agent may get none, the type is unknown or not worked on or the\n * asker policy is no longer listed; otherwise without the routes, requests and MCP exposure that\n * no longer fit and with limits capped at the ceiling, each with a problem.\n */\n private check(agent: AdminAgent, row: StoredConsultation): ConsultationCheck {\n const out = (problem: string): ConsultationCheck => ({ inEffect: false, problems: [problem], routes: [], allowRequests: false });\n const ceiling = this.ceilingOf(agent);\n if (!ceiling) {\n return out('not-consultable');\n }\n if (!this.rules.knownSubjectTypes().includes(row.subjectType)) {\n return out('unknown-subject-type');\n }\n if (!mockWorksOnCovers(agent, row.subjectType)) {\n return out('not-worked-on');\n }\n if (this.inCode(agent.id, row.subjectType)) {\n return out('conflicts-with-code');\n }\n if (row.askerPolicy !== null && !this.rules.agentPolicyNames().includes(row.askerPolicy)) {\n return out('unknown-agent-policy');\n }\n\n const problems: string[] = [];\n const addOnce = (problem: string): void => {\n if (!problems.includes(problem)) {\n problems.push(problem);\n }\n };\n const accountability = this.rules.accountabilityOf(agent);\n let kept: NhAssistantConsultationRoute[] = [];\n for (const route of row.routes) {\n const agentRights = route === 'subject-agent-rights';\n if (!ceiling.routes.includes(route) || (agentRights && row.subjectType === mockSystemSubjectType)) {\n addOnce('route-not-allowed');\n continue;\n }\n if (agentRights && accountability === 'subject-responsible') {\n addOnce('agent-answers-to-person');\n continue;\n }\n // An agent created here that answers for itself has no grants; one in code is assumed to have them.\n if (agentRights && agent.source === 'admin' && accountability === 'agent') {\n addOnce('agent-has-no-rights');\n continue;\n }\n kept.push(route);\n }\n\n if (row.proposalPolicy !== null && !this.rules.approvalPolicies().includes(row.proposalPolicy)) {\n // Without its policy nobody knows who decides a proposal: the consultation only answers.\n addOnce('unknown-policy');\n kept = [];\n }\n const policies = [row.proposalPolicy, this.rules.approvalPolicyOf(agent)].filter((policy): policy is string => policy !== null);\n if (kept.includes('subject-agent-rights') && policies.some(policy => this.namesOnlyTheInitiator(policy))) {\n addOnce('no-approver');\n kept = kept.filter(route => route !== 'subject-agent-rights');\n }\n let allowRequests = row.allowRequests;\n if (allowRequests && !ceiling.allowRequests) {\n problems.push('requests-not-allowed');\n allowRequests = false;\n }\n if (row.exposeToMcp && !ceiling.allowMcp) {\n problems.push('mcp-not-allowed');\n }\n if (row.maxToolCalls > ceiling.maxToolCalls\n || row.timeoutSeconds > ceiling.maxTimeoutSeconds\n || row.maxAnswerChars > ceiling.maxAnswerChars\n || row.maxHistoryMessages > ceiling.maxHistoryMessages) {\n problems.push('limit-above-ceiling');\n }\n return { inEffect: true, problems, routes: kept, allowRequests };\n }\n\n private namesOnlyTheInitiator(policy: string): boolean {\n const summary = this.rules.approvalPolicySummaries().find(item => item.name === policy);\n return summary !== undefined && summary.approvers.length > 0 && summary.approvers.every(approver => approver.kind === 'initiator');\n }\n\n private toConsultation(agent: AdminAgent, row: StoredConsultation): DataConsultation {\n const check = this.check(agent, row);\n const consultToolId = consultToolOf(agent.id, row.subjectType);\n const { agentId, ...stored } = row;\n return {\n ...stored,\n routes: [...row.routes],\n instructionsHash: row.instructions === null ? null : hashText(row.instructions),\n inEffect: check.inEffect,\n problem: check.problems[0] ?? null,\n problems: check.problems,\n routesInEffect: check.routes,\n consultToolId,\n requestToolId: check.allowRequests ? requestToolOf(agent.id, row.subjectType) : null,\n askingAgents: this.askersOf(agent.id, consultToolId)\n };\n }\n\n /** The other agents whose tool selectors select the tool now, by id: the consultation's second key. */\n private askersOf(agentId: string, toolId: string): string[] {\n return this.rules.all()\n .filter(agent => agent.id !== agentId && agent.toolSelectors.some(selector => covers(selector, toolId)))\n .map(agent => agent.id)\n .sort();\n }\n\n private inCode(agentId: string, subjectType: string): boolean {\n const allowed = this.codeAllowed.get(agentId);\n return allowed !== undefined\n && (Object.values(allowed).some(types => types?.includes(subjectType)) || subjectType in (this.codeDescriptions.get(agentId) ?? {}));\n }\n\n private storedOf(agentId: string): StoredConsultation[] {\n return [...this.stored.values()]\n .filter(stored => stored.agentId === agentId)\n .sort((left, right) => left.subjectType.localeCompare(right.subjectType));\n }\n}\n\n/** A ceiling of the scenario with the defaults of the ceiling builder. */\nfunction ceilingOf(ceiling: NhAssistantMockConsultationCeiling): ConsultationCeiling {\n return {\n routes: [...(ceiling.routes ?? [])],\n allowRequests: ceiling.allowRequests ?? false,\n allowMcp: ceiling.allowMcp ?? false,\n maxToolCalls: ceiling.maxToolCalls ?? bounds.toolCalls.max,\n maxTimeoutSeconds: ceiling.maxTimeoutSeconds ?? bounds.timeoutSeconds.max,\n maxAnswerChars: ceiling.maxAnswerChars ?? bounds.answerChars.max,\n maxHistoryMessages: ceiling.maxHistoryMessages ?? bounds.history.max,\n maxConsultations,\n maxInstructionsLength: maxInstructions\n };\n}\n\n/** The field error of each problem a consultation would have, as the server maps them on save. */\nfunction fieldFailure(problems: readonly string[]): NhAssistantMockResult {\n if (problems.includes('not-consultable')) {\n return failure('assistant-consultations-not-allowed');\n }\n if (problems.includes('conflicts-with-code')) {\n return failure('assistant-consultation-in-code');\n }\n const fields: Record<string, [string, string]> = {\n 'unknown-subject-type': ['subjectType', 'not-found'],\n 'not-worked-on': ['subjectType', 'invalid'],\n 'unknown-agent-policy': ['askerPolicy', 'not-found'],\n 'route-not-allowed': ['routes', 'not-allowed'],\n 'agent-answers-to-person': ['routes', 'invalid'],\n 'agent-has-no-rights': ['routes', 'invalid'],\n 'unknown-policy': ['proposalPolicy', 'not-found'],\n 'no-approver': ['proposalPolicy', 'invalid'],\n 'limit-above-ceiling': ['limits', 'not-allowed'],\n 'requests-not-allowed': ['allowRequests', 'not-allowed'],\n 'mcp-not-allowed': ['exposeToMcp', 'not-allowed']\n };\n const errors: Record<string, string[]> = {};\n for (const problem of problems) {\n const [field, code] = fields[problem] ?? ['subjectType', 'invalid'];\n errors[field] = [...(errors[field] ?? []), code];\n }\n return failure('assistant-validation', errors);\n}\n\n/** Known routes, each once, and at most one of the two routes at the subject. */\nfunction validRoutes(routes: readonly string[]): boolean {\n return routes.every(route => (allRoutes as readonly string[]).includes(route))\n && new Set(routes).size === routes.length\n && !(routes.includes('subject-agent-rights') && routes.includes('subject-asker-rights'));\n}\n\nfunction within(value: number, range: { min: number; max: number }): boolean {\n return Number.isInteger(value) && value >= range.min && value <= range.max;\n}\n\nfunction consultToolOf(agentId: string, subjectType: string): string {\n return `assistant.consult.${agentId}.${subjectType}`;\n}\n\nfunction requestToolOf(agentId: string, subjectType: string): string {\n return `assistant.request.${agentId}.${subjectType}`;\n}\n\n/** The agent's selector covers the tool: the same tool, or a pattern with `*` that matches it. */\nfunction covers(selector: string, toolId: string): boolean {\n const pattern = selector.split('*').map(part => part.replace(/[.+?^${}()|[\\]\\\\]/g, '\\\\$&')).join('.*');\n return new RegExp(`^${pattern}$`).test(toolId);\n}\n\nfunction key(agentId: string, subjectType: string): string {\n return `${agentId}/${subjectType}`;\n}\n\nfunction text(value: string | null | undefined): string | null {\n return typeof value === 'string' && value.trim().length > 0 ? value.trim() : null;\n}\n","import {\n AdminAgent,\n AgentRunConfiguration,\n AssistantDataClassification,\n AgentRunSettings,\n AgentRunSettingsRequest,\n CodeRunSettings,\n CodeTrigger,\n DataSkill,\n DataSkillRequest,\n DataSkillVersion,\n DataSkillVersionStatus,\n DataTrigger,\n DataTriggerRequest,\n FileLimits,\n LowerFileLimits,\n NhAssistantConsultationRoute,\n RunCatalog,\n SkillComparison,\n ToolCatalogEntry\n} from '@newheap/platform-ai-chat';\nimport { NhAssistantMockAccounts } from './nh-assistant-mock-accounts';\nimport { NhAssistantMockConsultations } from './nh-assistant-mock-consultations';\nimport { NhAssistantMockAdminScenario } from './nh-assistant-mock.models';\nimport { mockSystemSubjectType, mockWorksOnCovers } from './nh-assistant-mock-works-on';\nimport { mockClassificationWarnings, mockFailure as failure } from './nh-assistant-mock-admin-shared';\n\n/** A mock response: status plus optional JSON body. */\ninterface MockResult {\n status: number;\n body?: unknown;\n}\n\n/** What the run configuration reads of the mock's agents and changes in them. */\nexport interface NhAssistantMockRunAgents {\n find(agentId: string): AdminAgent | undefined;\n /** Every agent, to tell which of them select the tool of a consultation. */\n all(): AdminAgent[];\n /** The subject types a consultation can be about: the scenario's types and the whole application. */\n knownSubjectTypes(): string[];\n /**\n * Adds the state of a data skill to the agent, off with `startsOff`, or removes it with\n * `description` `null`.\n */\n setDataSkill(agentId: string, skillId: string, description: string | null, startsOff?: boolean): void;\n}\n\ninterface StoredSkillVersion extends DataSkill {\n status: DataSkillVersionStatus;\n}\n\nconst dashCase = /^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/;\nconst dataClassifications: string[] = ['public', 'internal', 'confidential', 'restricted'];\nconst accountabilities = ['agent', 'subject-responsible', 'service-account'];\nconst conflicts = ['coalesce', 'queue', 'supersede', 'ignore'];\nconst maxDescription = 300;\nconst maxInstructions = 20_000;\nconst maxMessage = 2_000;\nconst maxReason = 500;\n/** A data trigger applies at most this many filters of its event, each named in lowercase dash-case. */\nconst maxTriggerFilters = 10;\nconst filterName = /^[a-z0-9]+(?:-[a-z0-9]+)*$/;\n\n/** The platform's default file limits (`NhAssistantLimits`). */\nconst defaultFileLimits: FileLimits = {\n maxFileBytes: 20 * 1024 * 1024,\n maxFilePages: 100,\n maxFilesPerTurn: 5,\n maxFileTokensPerTurn: 100_000\n};\n\nconst fileLimitFields: readonly (keyof FileLimits)[] = ['maxFileBytes', 'maxFilePages', 'maxFilesPerTurn', 'maxFileTokensPerTurn'];\n\n/**\n * In-memory run configuration as data of the mock API: run settings of agents created in the\n * administration, skills defined as data with versions and candidates, and data triggers. Saving\n * checks the names against the scenario's run catalog as the server checks them against the code;\n * new skills and triggers start in shadow. A schedule without a subject set runs for the whole\n * application and fits only an agent that works on it; a stored trigger that no longer fits what its\n * agent works on stays, out of effect, with the problem `not-worked-on`. The mock runs no agents, so\n * a comparison counts nothing.\n */\nexport class NhAssistantMockRunConfiguration {\n private readonly settings = new Map<string, AgentRunSettings>();\n private readonly skills = new Map<string, StoredSkillVersion[]>();\n private readonly triggers = new Map<string, DataTrigger>();\n private readonly consultations: NhAssistantMockConsultations;\n private readonly catalog: RunCatalog;\n private readonly codeTriggers: (CodeTrigger & { agentId: string })[];\n /** How the scenario's agents in code run, as their code would say. */\n private readonly codeRunSettings: Map<string, Partial<CodeRunSettings>>;\n /** What each profile and its fallbacks permit, to warn as the server does. */\n private readonly profileClassifications: NhAssistantMockAdminScenario['profileClassifications'];\n\n constructor(\n scenario: NhAssistantMockAdminScenario,\n private readonly agents: NhAssistantMockRunAgents,\n private readonly now: () => string,\n private readonly accounts: NhAssistantMockAccounts = new NhAssistantMockAccounts(scenario)\n ) {\n const approvalPolicies = scenario.runCatalog?.approvalPolicies ?? scenario.policies ?? [];\n this.consultations = new NhAssistantMockConsultations(scenario.consultationsAsData, scenario.agents ?? [], {\n find: agentId => this.agents.find(agentId),\n all: () => this.agents.all(),\n knownSubjectTypes: () => this.agents.knownSubjectTypes(),\n isConfigured: agent => this.isConfigured(agent),\n accountabilityOf: agent => agent.source === 'admin' ? this.settings.get(agent.id)?.accountability ?? null : this.codeSettingsOf(agent).accountability,\n approvalPolicyOf: agent => agent.source === 'admin' ? this.settings.get(agent.id)?.approvalPolicy ?? null : this.codeSettingsOf(agent).approvalPolicy,\n approvalPolicies: () => this.catalog.approvalPolicies,\n approvalPolicySummaries: () => this.catalog.approvalPolicySummaries ?? [],\n agentPolicyNames: () => this.agentPolicyNames\n }, now);\n this.catalog = {\n // A trigger event lists its named filters, none unless the scenario's application registers some.\n triggerEvents: (scenario.runCatalog?.triggerEvents ?? []).map(event => ({ ...event, filters: event.filters ?? [] })),\n subjectSets: scenario.runCatalog?.subjectSets ?? [],\n ruleHandlers: scenario.runCatalog?.ruleHandlers ?? [],\n approvalPolicies,\n profiles: scenario.runCatalog?.profiles ?? [],\n // By default a policy lets the subject's approvers decide within a week, after the run.\n approvalPolicySummaries: scenario.runCatalog?.approvalPolicySummaries ?? approvalPolicies.map(name => ({\n name,\n approvers: [{ kind: 'subject-role', role: 'approver', namedRole: null, policy: null }],\n lifetimeMinutes: 7 * 24 * 60,\n fourEyes: false,\n mode: 'deferred'\n })),\n accountSearch: accounts.searchable,\n agentPolicies: scenario.runCatalog?.agentPolicies ?? [],\n divisions: scenario.runCatalog?.divisions ?? false,\n // The platform's default file limits, unless the scenario's application chose its own.\n fileLimits: scenario.runCatalog?.fileLimits ?? defaultFileLimits,\n consultationCeiling: this.consultations.applicationCeiling\n };\n this.codeTriggers = (scenario.codeTriggers ?? []).map(trigger => ({\n ...trigger,\n skillId: trigger.skillId ?? null,\n subjectType: trigger.subjectType ?? null\n }));\n this.profileClassifications = scenario.profileClassifications;\n this.codeRunSettings = new Map((scenario.agents ?? [])\n .filter(agent => agent.source === 'code')\n .map(agent => [agent.id, agent.codeRunSettings ?? {}]));\n }\n\n /** The policies administrators may choose as run and view policies, by name. */\n get agentPolicyNames(): string[] {\n return (this.catalog.agentPolicies ?? []).map(policy => policy.name);\n }\n\n /** Whether the scenario lists divisions, so an agent may work per division. */\n get divisionsListed(): boolean {\n return this.catalog.divisions === true;\n }\n\n /** The profiles the run catalog offers to data skills and to agents created in the administration. */\n get profileNames(): string[] {\n return [...this.catalog.profiles];\n }\n\n /**\n * The agent's consultations defined as data in effect with their routes in effect, which count for\n * its route switches.\n */\n consultationsInEffect(agentId: string): { subjectType: string; routes: NhAssistantConsultationRoute[] }[] {\n return this.consultations.inEffect(agentId);\n }\n\n /** The generated consult and request tools of the data consultations in effect. */\n consultationTools(): ToolCatalogEntry[] {\n return this.consultations.tools();\n }\n\n /** `GET admin/run-catalog`. */\n runCatalog(method: string): MockResult {\n return method === 'GET' ? { status: 200, body: this.catalog } : { status: 405 };\n }\n\n /**\n * `admin/agents/{id}/configuration`, `run-settings`, `skills/{skillId}[/...]`,\n * `triggers/{triggerId}[/shadow]` and `consultations/{subjectType}`; `segments` start after the\n * agent id.\n */\n handle(method: string, agentId: string, segments: string[], body: unknown, query: URLSearchParams): MockResult | null {\n const agent = this.agents.find(agentId);\n const [area, id, action, child] = segments;\n if (area === 'configuration' && segments.length === 1) {\n return agent && method === 'GET' ? { status: 200, body: this.configuration(agent) } : failure('assistant-agent-not-found');\n }\n if (area === 'run-settings' && segments.length === 1) {\n return agent ? this.runSettings(method, agent, body, query) : failure('assistant-agent-not-found');\n }\n if (area === 'skills' && id !== undefined && (segments.length === 2 || action === 'versions' || action === 'candidate')) {\n if (!agent) {\n return failure('assistant-agent-not-found');\n }\n if (action === 'versions' && segments.length === 3) {\n return method === 'GET' ? { status: 200, body: this.versions(agent.id, id) } : { status: 405 };\n }\n if (action === 'candidate' && segments.length === 4) {\n return this.candidate(method, agent, id, child, body);\n }\n return segments.length === 2 ? this.skill(method, agent, id, body, query) : null;\n }\n if (area === 'triggers' && id !== undefined && (segments.length === 2 || (segments.length === 3 && action === 'shadow'))) {\n if (!agent) {\n return failure('assistant-agent-not-found');\n }\n return action === 'shadow' ? this.triggerShadow(method, agent, id, body) : this.trigger(method, agent, id, body, query);\n }\n if (area === 'consultations' && id !== undefined && segments.length === 2) {\n return agent ? this.consultations.handle(method, agent, id, body, query) : failure('assistant-agent-not-found');\n }\n return null;\n }\n\n private configuration(agent: AdminAgent): AgentRunConfiguration {\n const dataSkills = this.liveSkills(agent.id);\n const dataSkillIds = new Set(dataSkills.map(skill => skill.skillId));\n const dataTriggers = [...this.triggers.values()]\n .filter(trigger => this.ownerOf(trigger) === agent.id)\n .map(trigger => {\n const problem = this.triggerProblem(agent, trigger);\n return problem ? { ...withoutOwner(trigger), inEffect: false, problem } : withoutOwner(trigger);\n });\n return {\n agentId: agent.id,\n toolSelectors: [...agent.toolSelectors],\n codeSkills: agent.source === 'code'\n ? (agent.skills ?? []).filter(skill => !dataSkillIds.has(skill.skillId)).map(skill => ({ skillId: skill.skillId, description: skill.description }))\n : [],\n dataSkills,\n codeTriggers: this.codeTriggers.filter(trigger => trigger.agentId === agent.id).map(({ agentId, ...trigger }) => trigger),\n dataTriggers,\n problems: [\n ...dataTriggers\n .filter(trigger => trigger.problem !== null)\n .map(trigger => ({ agentId: agent.id, kind: 'trigger' as const, id: trigger.triggerId, code: trigger.problem! })),\n ...this.consultations.problems(agent)\n ],\n source: agent.source,\n runSettings: agent.source === 'admin' ? this.settings.get(agent.id) ?? null : null,\n codeRunSettings: agent.source === 'code' ? this.codeSettingsOf(agent) : null,\n codeConsultations: this.consultations.codeConsultations(agent),\n dataConsultations: this.consultations.dataConsultations(agent),\n consultationCeiling: this.consultations.ceilingOf(agent)\n };\n }\n\n /**\n * How an agent in code runs: the scenario's `codeRunSettings`, answering to its technical account\n * when it has one and to itself otherwise, as an agent in code does by default.\n */\n private codeSettingsOf(agent: AdminAgent): CodeRunSettings {\n const given = this.codeRunSettings.get(agent.id) ?? {};\n return {\n accountability: given.accountability ?? (agent.serviceAccount ? 'service-account' : 'agent'),\n delegateFromInitiator: given.delegateFromInitiator ?? false,\n approvalPolicy: given.approvalPolicy ?? null,\n usesRules: given.usesRules ?? false,\n startsOff: given.startsOff ?? false,\n acceptsFiles: given.acceptsFiles ?? false\n };\n }\n\n /**\n * Why a stored trigger no longer fits what its agent works on, as the server reads it: an event\n * that names a type the agent does not work on, or a schedule for the whole application of an\n * agent that does not work on it.\n */\n private triggerProblem(agent: AdminAgent, trigger: DataTrigger): string | null {\n if (trigger.source === 'event') {\n const event = this.catalog.triggerEvents.find(item => item.name === trigger.event);\n if (event?.subjectType && !mockWorksOnCovers(agent, event.subjectType)) {\n return 'not-worked-on';\n }\n // A filter the event no longer offers keeps the trigger from firing.\n const offered = (event?.filters ?? []).map(filter => filter.name);\n return (trigger.filters ?? []).some(name => !offered.includes(name)) ? 'unknown-filter' : null;\n }\n return trigger.subjectSet === null && !mockWorksOnCovers(agent, mockSystemSubjectType) ? 'not-worked-on' : null;\n }\n\n private runSettings(method: string, agent: AdminAgent, body: unknown, query: URLSearchParams): MockResult {\n if (agent.source === 'code') {\n return failure('assistant-run-settings-in-code');\n }\n const current = this.settings.get(agent.id);\n if (method === 'DELETE') {\n if (!current) {\n return failure('assistant-agent-not-configured');\n }\n if (!versionMatches(query, current.version)) {\n return failure('assistant-version-conflict');\n }\n if (this.liveSkills(agent.id).length > 0\n || [...this.triggers.values()].some(trigger => this.ownerOf(trigger) === agent.id)\n || this.consultations.has(agent.id)) {\n return failure('assistant-run-settings-in-use');\n }\n this.settings.delete(agent.id);\n return { status: 204 };\n }\n if (method !== 'PUT') {\n return { status: 405 };\n }\n\n const request = (body ?? {}) as AgentRunSettingsRequest;\n const serviceAccount = text(request.serviceAccountActorId);\n const errors: Record<string, string[]> = {};\n if (!accountabilities.includes(request.accountability)) {\n errors['accountability'] = [request.accountability ? 'invalid' : 'required'];\n }\n if ((request.accountability === 'service-account') !== (serviceAccount !== null)) {\n errors['serviceAccountActorId'] = [serviceAccount === null ? 'required' : 'invalid'];\n }\n if (request.allowGatewayReads && request.accountability === 'agent') {\n errors['allowGatewayReads'] = ['invalid'];\n }\n if (!inRange(request.retryCount, 0, 10)) {\n errors['retryCount'] = ['invalid'];\n }\n if (!inRange(request.maxConcurrentRuns, 1, 100)) {\n errors['maxConcurrentRuns'] = ['invalid'];\n }\n if (!inRange(request.maxRunsPerSubjectPerDay, 1, 1_000)) {\n errors['maxRunsPerSubjectPerDay'] = ['invalid'];\n }\n if (!budgetValid(request.dailyToolCalls, request.dailyTokens)) {\n errors['dailyBudget'] = ['invalid'];\n }\n this.requireKnown(errors, 'approvalPolicy', request.approvalPolicy, this.catalog.approvalPolicies);\n this.requireKnown(errors, 'triageProfile', request.triageProfile, this.catalog.profiles);\n this.requireKnown(errors, 'ruleHandler', request.ruleHandler, this.catalog.ruleHandlers.map(handler => handler.name));\n this.requireFileLimits(errors, request.acceptsFiles ?? false, request);\n if (Object.keys(errors).length > 0) {\n return failure('assistant-validation', errors);\n }\n if (serviceAccount && this.accounts.rejects(serviceAccount)) {\n return failure('assistant-service-account-not-found');\n }\n if ((request.expectedVersion ?? null) !== (current?.version ?? null)) {\n return failure('assistant-version-conflict');\n }\n\n const saved: AgentRunSettings = {\n version: (current?.version ?? 0) + 1,\n accountability: request.accountability,\n serviceAccountActorId: serviceAccount,\n delegateFromInitiator: request.delegateFromInitiator ?? false,\n allowGatewayReads: request.allowGatewayReads ?? false,\n elevatedReads: request.elevatedReads ?? 'restricted',\n approvalPolicy: text(request.approvalPolicy),\n retryCount: request.retryCount ?? 3,\n dailyToolCalls: request.dailyToolCalls ?? null,\n dailyTokens: request.dailyTokens ?? null,\n maxConcurrentRuns: request.maxConcurrentRuns ?? 4,\n maxRunsPerSubjectPerDay: request.maxRunsPerSubjectPerDay ?? 10,\n maxTokensPerRun: request.maxTokensPerRun ?? null,\n triageProfile: text(request.triageProfile),\n ruleHandler: text(request.ruleHandler),\n changedAt: this.now(),\n changedBy: 'current-user',\n reason: text(request.reason),\n inEffect: true,\n problem: null,\n acceptsFiles: request.acceptsFiles ?? false,\n ...storedFileLimits(request)\n };\n this.settings.set(agent.id, saved);\n return { status: 200, body: saved };\n }\n\n private skill(method: string, agent: AdminAgent, skillId: string, body: unknown, query: URLSearchParams): MockResult {\n if (agent.source === 'code' && (agent.skills ?? []).some(skill => skill.skillId === skillId) && !this.skills.has(key(agent.id, skillId))) {\n return failure('assistant-skill-in-code');\n }\n if (!this.isConfigured(agent)) {\n return failure('assistant-agent-not-configured');\n }\n const versions = this.skills.get(key(agent.id, skillId)) ?? [];\n const live = versions.find(version => version.status === 'live');\n if (method === 'DELETE') {\n if (!live) {\n return failure('assistant-skill-not-found');\n }\n if (!versionMatches(query, live.version)) {\n return failure('assistant-version-conflict');\n }\n if ([...this.triggers.values()].some(trigger => this.ownerOf(trigger) === agent.id && trigger.skillId === skillId)) {\n return failure('assistant-skill-in-use');\n }\n for (const version of versions) {\n version.status = version.status === 'candidate' ? 'discarded' : version.status === 'live' ? 'superseded' : version.status;\n }\n this.agents.setDataSkill(agent.id, skillId, null);\n return { status: 204 };\n }\n if (method !== 'PUT') {\n return { status: 405 };\n }\n\n const request = (body ?? {}) as DataSkillRequest;\n const description = text(request.description);\n const errors: Record<string, string[]> = {};\n if (!dashCase.test(skillId)) {\n errors['skillId'] = ['invalid'];\n }\n if (description === null) {\n errors['description'] = ['required'];\n } else if (description.length > maxDescription) {\n errors['description'] = ['too-long'];\n }\n if ((request.instructions ?? '').length > maxInstructions) {\n errors['instructions'] = ['too-long'];\n }\n if ((request.tools ?? []).some(tool => !agent.toolSelectors.some(selector => covers(selector, tool)))) {\n errors['tools'] = ['invalid'];\n }\n if (!inRange(request.maxTokensPerRun, 1, Number.MAX_SAFE_INTEGER)) {\n errors['maxTokensPerRun'] = ['invalid'];\n }\n if (!budgetValid(request.dailyToolCalls, request.dailyTokens)) {\n errors['dailyBudget'] = ['invalid'];\n }\n if (request.apply === 'shadow' && (request.expectedVersion ?? null) === null) {\n errors['apply'] = ['invalid'];\n }\n // Only a new skill starts off; a skill that exists keeps its state.\n if (request.startsOff === true && (request.expectedVersion ?? null) !== null) {\n errors['startsOff'] = ['invalid'];\n }\n const classification = text(request.dataClassification);\n if (classification !== null && !dataClassifications.includes(classification)) {\n errors['dataClassification'] = ['invalid'];\n }\n this.requireKnown(errors, 'profile', request.profile, this.catalog.profiles);\n this.requireKnown(errors, 'ruleHandler', request.ruleHandler, this.catalog.ruleHandlers.map(handler => handler.name));\n this.requireKnown(errors, 'approvalPolicy', request.approvalPolicy, this.catalog.approvalPolicies);\n this.requireFileLimits(errors, request.acceptsFiles ?? false, request);\n if (Object.keys(errors).length > 0) {\n return failure('assistant-validation', errors);\n }\n if ((request.expectedVersion ?? null) !== (live?.version ?? null)) {\n return failure('assistant-version-conflict');\n }\n\n const candidate = request.apply === 'shadow';\n for (const version of versions) {\n if (version.status === 'candidate') {\n version.status = 'discarded';\n } else if (version.status === 'live' && !candidate) {\n version.status = 'superseded';\n }\n }\n const instructions = text(request.instructions);\n const saved: StoredSkillVersion = {\n skillId,\n version: versions.reduce((latest, version) => Math.max(latest, version.version), 0) + 1,\n status: candidate ? 'candidate' : 'live',\n description: description!,\n instructions,\n instructionsHash: instructions === null ? null : hashText(instructions),\n tools: [...new Set(request.tools ?? [])],\n profile: text(request.profile),\n dataClassification: classification as AssistantDataClassification | null,\n acceptsFiles: request.acceptsFiles ?? false,\n ...storedFileLimits(request),\n ruleHandler: text(request.ruleHandler),\n maxTokensPerRun: request.maxTokensPerRun ?? null,\n dailyToolCalls: request.dailyToolCalls ?? null,\n dailyTokens: request.dailyTokens ?? null,\n approvalPolicy: text(request.approvalPolicy),\n changedAt: this.now(),\n changedBy: 'current-user',\n reason: text(request.reason),\n inEffect: true,\n problem: null\n };\n this.skills.set(key(agent.id, skillId), [...versions, saved]);\n if (!candidate) {\n this.agents.setDataSkill(agent.id, skillId, saved.description, live === undefined && request.startsOff === true);\n }\n // A classification that no profile permits never refuses the save; the skill reports it.\n return { status: 200, body: this.withWarnings(agent, toSkill(saved)) };\n }\n\n private candidate(method: string, agent: AdminAgent, skillId: string, action: string | undefined, body: unknown): MockResult {\n const versions = this.skills.get(key(agent.id, skillId)) ?? [];\n const candidate = versions.find(version => version.status === 'candidate');\n const live = versions.find(version => version.status === 'live');\n if (action === 'comparison' && method === 'GET') {\n if (!candidate || !live) {\n return failure('assistant-skill-candidate-not-found');\n }\n const comparison: SkillComparison = {\n agentId: agent.id,\n skillId,\n from: candidate.changedAt,\n to: this.now(),\n live: emptyStats(live.version),\n candidate: emptyStats(candidate.version),\n pairedEvents: 0,\n tools: []\n };\n return { status: 200, body: comparison };\n }\n if ((action !== 'promote' && action !== 'discard') || method !== 'POST') {\n return { status: 405 };\n }\n\n const request = body as { version?: unknown; reason?: unknown } | undefined;\n if (typeof request?.version !== 'number') {\n return failure('assistant-validation', { version: ['required'] });\n }\n if (!candidate) {\n return failure('assistant-skill-candidate-not-found');\n }\n if (candidate.version !== request.version) {\n return failure('assistant-version-conflict');\n }\n if (action === 'discard') {\n candidate.status = 'discarded';\n return { status: 204 };\n }\n\n if (live) {\n live.status = 'superseded';\n }\n candidate.status = 'live';\n this.agents.setDataSkill(agent.id, skillId, candidate.description);\n return { status: 200, body: this.withWarnings(agent, toSkill(candidate)) };\n }\n\n private versions(agentId: string, skillId: string): DataSkillVersion[] {\n return [...(this.skills.get(key(agentId, skillId)) ?? [])]\n .sort((left, right) => right.version - left.version)\n .map(version => ({\n version: version.version,\n status: version.status,\n description: version.description,\n instructionsHash: version.instructionsHash,\n createdAt: version.changedAt,\n createdBy: version.changedBy,\n reason: version.reason\n }));\n }\n\n private trigger(method: string, agent: AdminAgent, triggerId: string, body: unknown, query: URLSearchParams): MockResult {\n if (this.codeTriggers.some(trigger => trigger.triggerId === triggerId)) {\n return failure('assistant-trigger-in-code');\n }\n if (!this.isConfigured(agent)) {\n return failure('assistant-agent-not-configured');\n }\n const existing = this.triggers.get(triggerId);\n if (existing && this.ownerOf(existing) !== agent.id) {\n return failure('assistant-validation', { triggerId: ['invalid'] });\n }\n if (method === 'DELETE') {\n if (!existing) {\n return failure('assistant-trigger-not-found');\n }\n if (!versionMatches(query, existing.version)) {\n return failure('assistant-version-conflict');\n }\n this.triggers.delete(triggerId);\n return { status: 204 };\n }\n if (method !== 'PUT') {\n return { status: 405 };\n }\n\n const request = (body ?? {}) as DataTriggerRequest;\n const schedule = request.source === 'schedule';\n const errors: Record<string, string[]> = {};\n if (!dashCase.test(triggerId)) {\n errors['triggerId'] = ['invalid'];\n }\n if (request.source !== 'event' && request.source !== 'schedule') {\n errors['source'] = [request.source ? 'invalid' : 'required'];\n }\n if (request.conflict && !conflicts.includes(request.conflict)) {\n errors['conflict'] = ['invalid'];\n }\n if (!inRange(request.debounceSeconds, 0, 3_600)) {\n errors['debounceSeconds'] = ['invalid'];\n }\n if (request.source === 'event') {\n this.requireKnown(errors, 'event', request.event, this.catalog.triggerEvents.map(item => item.name), true);\n // An event that names its object type up front fits only an agent that works on it.\n const subjectType = this.catalog.triggerEvents.find(item => item.name === text(request.event))?.subjectType;\n if (!errors['event'] && subjectType && !mockWorksOnCovers(agent, subjectType)) {\n errors['event'] = ['invalid'];\n }\n }\n if (schedule) {\n if ((text(request.cron) ?? '').split(' ').filter(field => field.length > 0).length < 5) {\n errors['cron'] = [text(request.cron) === null ? 'required' : 'invalid'];\n }\n if (text(request.subjectSet) !== null) {\n this.requireKnown(errors, 'subjectSet', request.subjectSet, this.catalog.subjectSets.map(item => item.name));\n } else if (!mockWorksOnCovers(agent, mockSystemSubjectType)) {\n // Without a subject set the schedule runs for the whole application, which only an agent\n // that works on it may do.\n errors['subjectSet'] = ['required'];\n }\n const message = text(request.message);\n if (message === null) {\n errors['message'] = ['required'];\n } else if (message.length > maxMessage) {\n errors['message'] = ['too-long'];\n }\n }\n const skill = text(request.skill);\n if (skill !== null && !this.skillIds(agent).includes(skill)) {\n errors['skill'] = ['not-found'];\n }\n // The filters in the order chosen, each once; only an event trigger takes them.\n const filters = [...new Set((request.filters ?? []).map(name => (typeof name === 'string' ? name.trim() : '')))];\n if (filters.length > maxTriggerFilters || filters.some(name => name.length > 64 || !filterName.test(name)) || (schedule && filters.length > 0)) {\n errors['filters'] = ['invalid'];\n }\n if (Object.keys(errors).length > 0) {\n return failure('assistant-validation', errors);\n }\n if (request.source === 'event') {\n const offered = (this.catalog.triggerEvents.find(item => item.name === text(request.event))?.filters ?? []).map(filter => filter.name);\n if (filters.some(name => !offered.includes(name))) {\n return failure('assistant-trigger-filter-not-found', { filters: ['not-found'] });\n }\n }\n if ((request.expectedVersion ?? null) !== (existing?.version ?? null)) {\n return failure('assistant-version-conflict');\n }\n\n const saved: DataTrigger & { agentId?: string } = {\n triggerId,\n skillId: skill,\n source: request.source,\n event: schedule ? null : text(request.event),\n cron: schedule ? text(request.cron) : null,\n timeZone: schedule ? text(request.timeZone) : null,\n subjectSet: schedule ? text(request.subjectSet) : null,\n message: schedule ? text(request.message) : null,\n conflict: request.conflict ?? (schedule ? 'ignore' : 'coalesce'),\n debounceSeconds: schedule ? 0 : request.debounceSeconds ?? 120,\n shadow: existing?.shadow ?? true,\n version: (existing?.version ?? 0) + 1,\n changedAt: this.now(),\n changedBy: 'current-user',\n reason: text(request.reason),\n inEffect: true,\n problem: null,\n filters: schedule ? [] : filters\n };\n this.triggers.set(triggerId, Object.assign(saved, { [ownerKey]: agent.id }));\n return { status: 200, body: withoutOwner(saved) };\n }\n\n private triggerShadow(method: string, agent: AdminAgent, triggerId: string, body: unknown): MockResult {\n if (method !== 'POST') {\n return { status: 405 };\n }\n const existing = this.triggers.get(triggerId);\n if (!existing || this.ownerOf(existing) !== agent.id) {\n return failure('assistant-trigger-not-found');\n }\n const request = body as { mode?: unknown; reason?: unknown } | undefined;\n if (request?.mode !== 'shadow' && request?.mode !== 'live') {\n return failure('assistant-validation', { mode: [request?.mode === undefined ? 'required' : 'invalid'] });\n }\n if (typeof request.reason === 'string' && request.reason.length > maxReason) {\n return failure('assistant-validation', { reason: ['too-long'] });\n }\n\n existing.shadow = request.mode === 'shadow';\n existing.changedAt = this.now();\n existing.changedBy = 'current-user';\n existing.reason = typeof request.reason === 'string' && request.reason.trim().length > 0 ? request.reason.trim() : null;\n return { status: 200, body: withoutOwner(existing) };\n }\n\n /** An agent in code has a run configuration; one created in the administration once it has run settings. */\n private isConfigured(agent: AdminAgent): boolean {\n return agent.source === 'code' || this.settings.has(agent.id);\n }\n\n private skillIds(agent: AdminAgent): string[] {\n return [...(agent.skills ?? []).map(skill => skill.skillId), ...this.liveSkills(agent.id).map(skill => skill.skillId)];\n }\n\n private liveSkills(agentId: string): DataSkill[] {\n const result: DataSkill[] = [];\n const agent = this.agents.find(agentId);\n for (const [stored, versions] of this.skills) {\n if (!stored.startsWith(`${agentId}/`)) {\n continue;\n }\n const live = versions.find(version => version.status === 'live');\n if (live) {\n const candidate = versions.find(version => version.status === 'candidate');\n result.push({\n ...this.withWarnings(agent, toSkill(live)),\n candidate: candidate ? this.withWarnings(agent, toSkill(candidate)) : null\n });\n }\n }\n return result.sort((left, right) => left.skillId.localeCompare(right.skillId));\n }\n\n /**\n * The skill with the warnings the server reports for it: its classification, or else its agent's,\n * that its profile, or else its agent's, does not permit.\n */\n private withWarnings(agent: AdminAgent | undefined, skill: DataSkill): DataSkill {\n return {\n ...skill,\n warnings: mockClassificationWarnings(\n this.profileClassifications,\n skill.profile ?? agent?.profile,\n skill.dataClassification ?? agent?.dataClassification)\n };\n }\n\n private ownerOf(trigger: DataTrigger): string | undefined {\n return (trigger as unknown as Record<string, string | undefined>)[ownerKey];\n }\n\n private requireKnown(errors: Record<string, string[]>, field: string, value: string | null | undefined, known: string[], required = false): void {\n const name = text(value);\n if (name === null) {\n if (required) {\n errors[field] = ['required'];\n }\n return;\n }\n if (!known.includes(name)) {\n errors[field] = ['not-found'];\n }\n }\n\n /**\n * Lower file limits as the server checks them: each a whole number from 1 to the application's\n * limit, and only next to `acceptsFiles`.\n */\n private requireFileLimits(errors: Record<string, string[]>, acceptsFiles: boolean, request: LowerFileLimits): void {\n const application = this.catalog.fileLimits ?? defaultFileLimits;\n for (const field of fileLimitFields) {\n const value = request[field];\n if (value !== null && value !== undefined && (!acceptsFiles || !inRange(value, 1, application[field]))) {\n errors[field] = ['invalid'];\n }\n }\n }\n}\n\n/** The lower file limits a save stores, `null` where the request keeps the application's. */\nfunction storedFileLimits(request: LowerFileLimits): Required<LowerFileLimits> {\n return {\n maxFileBytes: request.maxFileBytes ?? null,\n maxFilePages: request.maxFilePages ?? null,\n maxFilesPerTurn: request.maxFilesPerTurn ?? null,\n maxFileTokensPerTurn: request.maxFileTokensPerTurn ?? null\n };\n}\n\nconst ownerKey = '__agentId';\n\nfunction key(agentId: string, skillId: string): string {\n return `${agentId}/${skillId}`;\n}\n\nfunction toSkill({ status, ...skill }: StoredSkillVersion): DataSkill {\n return { ...skill, tools: [...skill.tools] };\n}\n\nfunction withoutOwner(trigger: DataTrigger): DataTrigger {\n const { [ownerKey]: owner, ...rest } = trigger as DataTrigger & Record<string, unknown>;\n return { ...rest } as DataTrigger;\n}\n\nfunction emptyStats(version: number): SkillComparison['live'] {\n return { version, runs: 0, completed: 0, failed: 0, proposals: 0, toolCalls: 0, tokens: 0 };\n}\n\nfunction text(value: string | null | undefined): string | null {\n return typeof value === 'string' && value.trim().length > 0 ? value.trim() : null;\n}\n\nfunction inRange(value: number | null | undefined, min: number, max: number): boolean {\n return value === null || value === undefined || (Number.isInteger(value) && value >= min && value <= max);\n}\n\nfunction budgetValid(calls: number | null | undefined, tokens: number | null | undefined): boolean {\n const hasCalls = calls !== null && calls !== undefined;\n const hasTokens = tokens !== null && tokens !== undefined;\n return hasCalls === hasTokens && (!hasCalls || (calls! >= 1 && tokens! >= 1));\n}\n\nfunction versionMatches(query: URLSearchParams, version: number): boolean {\n const expected = query.get('expectedVersion');\n return expected === null || Number(expected) === version;\n}\n\n/** The agent's selector covers the skill's: the same tool, or a prefix selector that includes it. */\nfunction covers(agentSelector: string, skillSelector: string): boolean {\n return agentSelector === skillSelector\n || (agentSelector.endsWith('.*') && skillSelector.startsWith(agentSelector.slice(0, -1)));\n}\n\nfunction hashText(text: string): string {\n let hash = 0x811c9dc5;\n for (let index = 0; index < text.length; index++) {\n hash ^= text.charCodeAt(index);\n hash = Math.imul(hash, 0x01000193) >>> 0;\n }\n return `fnv1a:${hash.toString(16).padStart(8, '0')}`;\n}\n","import {\n AdminAgent,\n AgentSummary,\n ApplicationContext,\n ApplicationContextVersion,\n AssistantPreferences,\n McpConnectionStatus,\n NhAssistantMcpAuthorizationOutcome,\n ToolCatalogEntry\n} from '@newheap/platform-ai-chat';\nimport { NhAssistantMockAdminAgent, NhAssistantMockRemoteTool, NhAssistantMockScenario } from './nh-assistant-mock.models';\nimport { NhAssistantMockAccounts } from './nh-assistant-mock-accounts';\nimport { NhAssistantMockAdminAgents } from './nh-assistant-mock-admin-agents';\nimport { NhAssistantMockAdminMcp } from './nh-assistant-mock-admin-mcp';\nimport {\n NhAssistantMockResult,\n mockFailure as failure,\n mockHashText as hashText,\n mockMaxInstructions as maxInstructions,\n mockValidationFailure as validationFailure\n} from './nh-assistant-mock-admin-shared';\nimport { NhAssistantMockRunConfiguration } from './nh-assistant-mock-run-configuration';\nimport { mockSystemSubjectType } from './nh-assistant-mock-works-on';\n\nexport type { NhAssistantMockResult } from './nh-assistant-mock-admin-shared';\n\nconst styles = ['default', 'direct', 'personal', 'detailed'];\nconst addressForms = ['informal', 'formal'];\nconst responseLengths = ['short', 'normal', 'long'];\nconst maxCustomInstructions = 1_000;\n\nconst defaultPreferences: AssistantPreferences = {\n style: 'default',\n addressForm: 'informal',\n responseLength: 'normal',\n customInstructions: null\n};\n\n/**\n * In-memory administration and preference endpoints of the mock API. Routes `admin/*` to its\n * areas: the agents (`nh-assistant-mock-admin-agents`), their run configuration\n * (`nh-assistant-mock-run-configuration`), the MCP servers and the caller's connections\n * (`nh-assistant-mock-admin-mcp`) and the accounts (`nh-assistant-mock-accounts`), and keeps the\n * application context and the caller's preferences itself. Follows the contract rules: secrets are\n * write-only, new MCP tools start disabled as mutations, a changed remote schema disables a tool,\n * and stale versions answer `409`.\n */\nexport class NhAssistantMockAdmin {\n private readonly agents: NhAssistantMockAdminAgents;\n private readonly mcp: NhAssistantMockAdminMcp;\n private readonly accounts: NhAssistantMockAccounts;\n private readonly runConfiguration: NhAssistantMockRunConfiguration;\n private readonly contextVersions: (ApplicationContextVersion & { text: string })[] = [];\n private preferences: AssistantPreferences;\n private canAdminister: boolean;\n\n constructor(private readonly scenario: NhAssistantMockScenario, private readonly now: () => string) {\n const admin = scenario.admin ?? {};\n this.canAdminister = admin.canAdminister ?? true;\n this.preferences = { ...defaultPreferences, ...scenario.preferences };\n\n this.contextVersions.push({ version: 1, hash: hashText(admin.context ?? ''), updatedAt: now(), updatedBy: null, text: admin.context ?? '' });\n\n this.agents = new NhAssistantMockAdminAgents(scenario, now, {\n hasServer: serverId => this.mcp.hasServer(serverId),\n agentPolicyNames: () => this.runConfiguration.agentPolicyNames,\n divisionsListed: () => this.runConfiguration.divisionsListed,\n profileNames: () => this.runConfiguration.profileNames,\n dataConsultations: agentId => this.runConfiguration.consultationsInEffect(agentId)\n });\n this.accounts = new NhAssistantMockAccounts(admin);\n this.runConfiguration = new NhAssistantMockRunConfiguration(\n admin,\n {\n find: agentId => this.agents.find(agentId),\n all: () => this.agents.all(),\n knownSubjectTypes: () => [...(scenario.subjectTypes ?? []).map(type => type.id), mockSystemSubjectType],\n setDataSkill: (agentId, skillId, description, startsOff) => this.agents.setDataSkill(agentId, skillId, description, startsOff)\n },\n now,\n this.accounts);\n this.mcp = new NhAssistantMockAdminMcp(scenario, now, {\n agents: () => this.agents.all(),\n chatAgentIds: () => this.agents.chatAgents().map(agent => agent.id),\n removeServer: serverId => this.agents.removeServer(serverId),\n canAdminister: () => this.canAdminister\n });\n this.presetRunConfigurations(admin.agents ?? []);\n }\n\n get administers(): boolean {\n return this.canAdminister;\n }\n\n setCanAdminister(value: boolean): void {\n this.canAdminister = value;\n }\n\n /** What the mock authorization window answers next. */\n setMcpAuthorizationOutcome(outcome: 'approve' | 'deny' | 'cancel'): void {\n this.mcp.setAuthorizationOutcome(outcome);\n }\n\n /**\n * Simulates what happens to a server's OAuth connections outside the application: the\n * authorization server refused a refresh (`reauthorization-required`), or the server named another\n * authorization server (`issuer-changed`).\n */\n setMcpConnectionStatus(serverId: string, status: Exclude<McpConnectionStatus, 'not-connected' | 'active'>): void {\n this.mcp.setConnectionStatus(serverId, status);\n }\n\n /**\n * Why the caller has to connect a server each person connects to before a turn can use it, or null\n * when the caller's connection is active.\n */\n connectionNeeded(serverId: string): { displayName: string; reason: 'not-connected' | 'reauthorization-required' | 'insufficient-scope' } | null {\n return this.mcp.connectionNeeded(serverId);\n }\n\n /**\n * Plays the callback of a started authorization as the authorization server and the callback page\n * would: the person approves, denies or closes the window.\n */\n authorizeFlow(flowId: string): NhAssistantMcpAuthorizationOutcome {\n return this.mcp.authorizeFlow(flowId);\n }\n\n /** Replaces the tool list of a simulated remote server; the next sync picks it up. */\n setRemoteTools(serverId: string, tools: NhAssistantMockRemoteTool[]): void {\n this.mcp.setRemoteTools(serverId, tools);\n }\n\n /** Chat agents: code agents keep their keys, admin agents carry literal text; stopped agents are left out. */\n chatAgents(): AgentSummary[] {\n return this.agents.chatAgents();\n }\n\n /** Every agent of the administration, also those kept out of the chat, for the agent runs. */\n allAgents(): AdminAgent[] {\n return this.agents.all();\n }\n\n handlePreferences(method: string, body: unknown): NhAssistantMockResult {\n if (method === 'GET') {\n return { status: 200, body: this.preferences };\n }\n if (method !== 'PUT') {\n return { status: 405 };\n }\n\n const input = body as Partial<AssistantPreferences> | undefined;\n const instructions = input?.customInstructions ?? null;\n if (!input || !styles.includes(input.style ?? '') || !addressForms.includes(input.addressForm ?? '') ||\n !responseLengths.includes(input.responseLength ?? '') ||\n (instructions !== null && (typeof instructions !== 'string' || instructions.length > maxCustomInstructions))) {\n return validationFailure();\n }\n\n this.preferences = {\n style: input.style!,\n addressForm: input.addressForm!,\n responseLength: input.responseLength!,\n customInstructions: instructions && instructions.trim().length > 0 ? instructions : null\n };\n return { status: 200, body: this.preferences };\n }\n\n /**\n * `GET mcp-connections` and `PUT mcp-connections/{serverId}`: the caller's consent to background\n * use of servers that run with the caller's own account. A consent holds for the server's address\n * and authentication as they were; a change shows it as not allowed again.\n */\n handleMcpConnections(method: string, segments: string[], body: unknown): NhAssistantMockResult {\n return this.mcp.handleConnections(method, segments, body);\n }\n\n handleAdmin(method: string, segments: string[], body: unknown, query = new URLSearchParams()): NhAssistantMockResult {\n if (!this.canAdminister) {\n return failure('assistant-forbidden');\n }\n\n const [, area, id, action, child] = segments;\n switch (area) {\n case 'context':\n return this.context(method, id, body);\n case 'tools':\n return method === 'GET' && segments.length === 2 ? { status: 200, body: this.toolCatalog() } : failure('assistant-not-found');\n case 'run-catalog':\n return segments.length === 2 ? this.runConfiguration.runCatalog(method) : failure('assistant-not-found');\n case 'accounts':\n return segments.length === 2 ? this.accounts.search(method, query) : failure('assistant-not-found');\n case 'agents':\n if (id !== undefined && action === 'feedback') {\n return this.agents.agentFeedback(method, id, child, segments.length);\n }\n if (id !== undefined && action === 'evaluation') {\n return this.agents.agentEvaluation(method, id, child, segments.length, query);\n }\n if (id !== undefined && (action === 'replay' || action === 'replays') && segments.length === 4) {\n return this.agents.agentReplay(method, id, action, body);\n }\n if (id !== undefined && action !== undefined) {\n const configured = this.runConfiguration.handle(method, id, segments.slice(3), body, query);\n if (configured) {\n return configured;\n }\n }\n if (id !== undefined && action === 'skills' && child !== undefined && segments[5] === 'state' && segments.length === 6) {\n return this.agents.skillStateEndpoint(method, id, child, body);\n }\n if (id !== undefined && action === 'skills' && child !== undefined && segments[5] === 'shadow' && segments.length === 6) {\n return this.agents.skillShadowEndpoint(method, id, child, body);\n }\n return this.agents.agentsEndpoint(method, id, action, body, segments.length);\n case 'mcp-servers':\n return this.mcp.serversEndpoint(method, id, action, child, body, segments.length);\n case 'mcp-auth-modes':\n return this.mcp.authModesEndpoint(method, segments.length);\n default:\n return failure('assistant-not-found');\n }\n }\n\n private context(method: string, sub: string | undefined, body: unknown): NhAssistantMockResult {\n const current = this.contextVersions[this.contextVersions.length - 1];\n if (sub === 'versions' && method === 'GET') {\n return { status: 200, body: [...this.contextVersions].reverse().map(({ text, ...version }) => version) };\n }\n if (sub !== undefined) {\n return failure('assistant-not-found');\n }\n if (method === 'GET') {\n return { status: 200, body: toContext(current) };\n }\n if (method !== 'PUT') {\n return { status: 405 };\n }\n\n const input = body as { text?: unknown; expectedVersion?: unknown } | undefined;\n if (typeof input?.text !== 'string' || typeof input.expectedVersion !== 'number') {\n return validationFailure();\n }\n if (input.text.length > maxInstructions) {\n return failure('assistant-instructions-too-long');\n }\n if (input.expectedVersion !== current.version) {\n return failure('assistant-version-conflict');\n }\n\n const next = { version: current.version + 1, hash: hashText(input.text), updatedAt: this.now(), updatedBy: 'current-user', text: input.text };\n this.contextVersions.push(next);\n return { status: 200, body: toContext(next) };\n }\n\n /**\n * Saves the run configuration the scenario gives agents created in the administration through the\n * mock's own endpoints, as an administrator would: the run settings, then each skill and trigger,\n * put live when the scenario says so, and then the consultations defined as data of every agent. A\n * part the mock refuses fails the scenario at once.\n */\n private presetRunConfigurations(agents: readonly NhAssistantMockAdminAgent[]): void {\n const query = new URLSearchParams();\n for (const agent of agents) {\n const preset = agent.runConfiguration;\n if (!preset) {\n continue;\n }\n if (agent.source !== 'admin') {\n throw new Error(`Mock agent '${agent.id}' runs as its code says; only an agent created in the administration has a run configuration as data.`);\n }\n\n presetStep(agent.id, 'run settings', this.runConfiguration.handle('PUT', agent.id, ['run-settings'], preset.runSettings, query));\n for (const { skillId, shadow, ...skill } of preset.skills ?? []) {\n presetStep(agent.id, `skill '${skillId}'`, this.runConfiguration.handle('PUT', agent.id, ['skills', skillId], skill, query));\n if (shadow === false) {\n presetStep(agent.id, `live skill '${skillId}'`, this.agents.skillShadowEndpoint('POST', agent.id, skillId, { mode: 'live' }));\n }\n }\n for (const { triggerId, shadow, ...trigger } of preset.triggers ?? []) {\n presetStep(agent.id, `trigger '${triggerId}'`, this.runConfiguration.handle('PUT', agent.id, ['triggers', triggerId], trigger, query));\n if (shadow === false) {\n presetStep(agent.id, `live trigger '${triggerId}'`, this.runConfiguration.handle('POST', agent.id, ['triggers', triggerId, 'shadow'], { mode: 'live' }, query));\n }\n }\n }\n for (const agent of agents) {\n for (const { subjectType, ...consultation } of agent.dataConsultations ?? []) {\n presetStep(agent.id, `consultation about '${subjectType}'`, this.runConfiguration.handle('PUT', agent.id, ['consultations', subjectType], consultation, query));\n }\n }\n }\n\n /**\n * The scenario's tools, with the object type they name as the server reports it, the generated tools\n * of the consultations defined as data in effect, read live as the server reads its catalogs, and\n * the enabled MCP tools.\n */\n private toolCatalog(): ToolCatalogEntry[] {\n return [\n ...(this.scenario.admin?.tools ?? []).map(tool => ({ ...tool, subjectType: tool.subjectType ?? null })),\n ...this.runConfiguration.consultationTools(),\n ...this.mcp.catalogEntries()\n ];\n }\n}\n\n/** Fails the scenario when the mock refused a part of a preset run configuration, with the mock's answer. */\nfunction presetStep(agentId: string, part: string, result: NhAssistantMockResult | null): void {\n if (!result || result.status >= 300) {\n throw new Error(`The mock refused the ${part} of agent '${agentId}' in the scenario's run configuration: ${JSON.stringify(result?.body ?? null)}.`);\n }\n}\n\nfunction toContext(version: ApplicationContextVersion & { text: string }): ApplicationContext {\n return { text: version.text, version: version.version, hash: version.hash, updatedAt: version.updatedAt, updatedBy: version.updatedBy };\n}\n","import { AgentUploads, FileReference, NH_ASSISTANT_UPLOAD_HEADER, ɵnhAssistantMediaTypeOf } from '@newheap/platform-ai-chat';\nimport { NhAssistantMockResult, mockFailure } from './nh-assistant-mock-admin-shared';\n\n/** An upload as the application's file source receives it, after the assistant's checks. */\nexport interface NhAssistantMockUpload {\n conversationId: string;\n name: string;\n mediaType: string;\n size: number;\n}\n\n/** The longest file name a reference takes, as on the server. */\nconst maxNameLength = 256;\n\nconst mediaTypePattern = /^[a-z0-9][a-z0-9!#$&^_.+-]*\\/[a-z0-9][a-z0-9!#$&^_.+-]*$/;\n\nconst zipSignature = [0x50, 0x4b, 0x03, 0x04];\nconst pngSignature = [0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a];\nconst jpegSignature = [0xff, 0xd8, 0xff];\n\n/**\n * The binary formats a text upload may be in disguise, as on the server: an OLE2 compound file (Word,\n * Excel and PowerPoint 97 to 2003), a ZIP package (also an empty one), a PDF, PNG, JPEG or GIF.\n */\nconst binarySignatures = [\n [0xd0, 0xcf, 0x11, 0xe0, 0xa1, 0xb1, 0x1a, 0xe1],\n zipSignature,\n [0x50, 0x4b, 0x05, 0x06],\n [0x25, 0x50, 0x44, 0x46, 0x2d],\n pngSignature,\n jpegSignature,\n [0x47, 0x49, 0x46, 0x38, 0x37, 0x61],\n [0x47, 0x49, 0x46, 0x38, 0x39, 0x61]\n];\n\n/** How files of the platform's types start; other accepted types are the application's to check. */\nconst signatures: Record<string, (head: Uint8Array) => boolean> = {\n 'application/pdf': head => indexOf(head, [0x25, 0x50, 0x44, 0x46, 0x2d]) >= 0,\n 'image/png': head => startsWith(head, pngSignature),\n 'image/jpeg': head => startsWith(head, jpegSignature),\n 'application/vnd.openxmlformats-officedocument.wordprocessingml.document': head => startsWith(head, zipSignature),\n 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet': head => startsWith(head, zipSignature),\n 'application/vnd.openxmlformats-officedocument.presentationml.presentation': head => startsWith(head, zipSignature)\n};\n\n/**\n * Whether the content starts as files of the media type do: the signature of a platform type, and for\n * text (`text/*`, JSON and XML, also with a `+json` or `+xml` suffix) no binary signature. UTF-16 text\n * passes: there is no NUL-byte check.\n */\nfunction matchesSignature(head: Uint8Array, mediaType: string): boolean {\n if (isTextMediaType(mediaType)) {\n return !binarySignatures.some(signature => startsWith(head, signature));\n }\n\n return signatures[mediaType]?.(head) ?? true;\n}\n\nfunction isTextMediaType(mediaType: string): boolean {\n return mediaType.startsWith('text/')\n || mediaType === 'application/json'\n || mediaType === 'application/xml'\n || mediaType.endsWith('+json')\n || mediaType.endsWith('+xml');\n}\n\n/**\n * The files of the mock API: `POST conversations/{id}/files` with the server's checks, and the\n * attachments of a message, which a turn opens again as the server's file source would.\n */\nexport class NhAssistantMockFiles {\n private readonly stored = new Map<string, NhAssistantMockUpload & { reference: FileReference }>();\n private next = 0;\n\n constructor(\n private readonly refuse?: (upload: NhAssistantMockUpload) => string | null,\n private readonly scan?: (upload: NhAssistantMockUpload) => 'refused' | 'failed' | null\n ) {}\n\n /** The uploads the mock stored, oldest first. */\n get uploads(): readonly (NhAssistantMockUpload & { reference: FileReference })[] {\n return [...this.stored.values()];\n }\n\n /**\n * Checks an upload as the server does, in its order: a file source, an agent that accepts files,\n * the upload header, one file part named `file` with a name and content, an accepted media type\n * whose content matches, the agent's largest size, the application's scanner, and finally the\n * application's own refusal.\n */\n async upload(\n conversationId: string,\n offered: boolean,\n uploads: AgentUploads | null,\n headers: Record<string, string>,\n form: FormData\n ): Promise<NhAssistantMockResult> {\n if (!offered) {\n return mockFailure('assistant-files-unavailable');\n }\n if (!uploads) {\n return mockFailure('assistant-files-not-accepted');\n }\n\n const header = Object.entries(headers).find(([name]) => name.toLowerCase() === NH_ASSISTANT_UPLOAD_HEADER.toLowerCase());\n let parts = 0;\n form.forEach(() => parts++);\n const file = form.get('file');\n if (!header?.[1] || parts !== 1 || !(file instanceof Blob)) {\n return mockFailure('assistant-file-upload-invalid');\n }\n\n const name = nameOf(file instanceof File ? file.name : '');\n if (name === null || file.size === 0) {\n return mockFailure('assistant-file-upload-invalid');\n }\n // A missing or generic type takes the accepted type of the file name's extension, as on the server.\n const mediaType = normalizeMediaType(ɵnhAssistantMediaTypeOf({ name, type: file.type }, uploads.acceptedMediaTypes, uploads.mappedExtensions));\n if (mediaType === null || !uploads.acceptedMediaTypes.includes(mediaType)) {\n return mockFailure('assistant-file-type-not-accepted');\n }\n if (file.size > uploads.maxFileBytes) {\n return mockFailure('assistant-file-too-large');\n }\n const head = new Uint8Array(await file.slice(0, 1024).arrayBuffer());\n if (!matchesSignature(head, mediaType)) {\n return mockFailure('assistant-file-type-not-accepted');\n }\n\n const upload: NhAssistantMockUpload = { conversationId, name, mediaType, size: file.size };\n // The application's scanner sees the file before its file source stores anything.\n const scanned = this.scan?.(upload) ?? null;\n if (scanned) {\n return mockFailure(scanned === 'refused' ? 'assistant-file-scan-refused' : 'assistant-file-upload-failed');\n }\n const refusal = this.refuse?.(upload) ?? null;\n if (refusal) {\n return mockFailure(refusalCode(refusal));\n }\n\n this.next++;\n const reference: FileReference = { id: `mock-file-${this.next}`, name, mediaType, size: file.size, hash: null };\n this.stored.set(reference.id, { ...upload, reference });\n return { status: 200, body: reference };\n }\n\n /**\n * The code the server refuses a message's `files` with before the turn starts, or `null`: without\n * a file source, more files than one message carries, or a reference that is not one.\n */\n checkMessage(files: unknown, offered: boolean, maxFiles: number): string | null {\n if (files === undefined || files === null || (Array.isArray(files) && files.length === 0)) {\n return null;\n }\n if (!Array.isArray(files)) {\n return 'assistant-file-reference-invalid';\n }\n if (!offered) {\n return 'assistant-files-unavailable';\n }\n if (files.length > maxFiles) {\n return 'assistant-file-count-limit';\n }\n\n return files.every(isReference) ? null : 'assistant-file-reference-invalid';\n }\n\n /**\n * The code of the first attachment the turn cannot open, as the server's file source refuses it,\n * or `null` when it opens them all. A reference the mock never stored, or one of another\n * conversation, is not found.\n */\n openCode(conversationId: string, files: readonly FileReference[]): string | null {\n const missing = files.find(file => this.stored.get(file.id)?.conversationId !== conversationId);\n return missing ? 'assistant-file-not-found' : null;\n }\n}\n\n/** The file name without a path; `null` when nothing usable is left, as on the server. */\nfunction nameOf(fileName: string): string | null {\n const name = fileName.slice(Math.max(fileName.lastIndexOf('/'), fileName.lastIndexOf('\\\\')) + 1).trim();\n return name.length === 0 || name.length > maxNameLength || /[\\u0000-\\u001f\\u007f]/.test(name) ? null : name;\n}\n\nfunction normalizeMediaType(value: string): string | null {\n const essence = value.split(';')[0].trim().toLowerCase();\n return essence.length <= 128 && mediaTypePattern.test(essence) ? essence : null;\n}\n\nfunction isReference(value: unknown): value is FileReference {\n const file = value as Partial<FileReference> | null;\n return !!file\n && isText(file.id)\n && isText(file.name)\n && typeof file.mediaType === 'string' && normalizeMediaType(file.mediaType) !== null\n && typeof file.size === 'number' && file.size >= 0;\n}\n\nfunction isText(value: unknown): value is string {\n return typeof value === 'string' && value.trim().length > 0 && value.length <= maxNameLength && !/[\\u0000-\\u001f\\u007f]/.test(value);\n}\n\n/** The application's refusal as the server passes it on. */\nfunction refusalCode(code: string): string {\n switch (code) {\n case 'assistant-files-unavailable':\n case 'assistant-file-too-large':\n return code;\n case 'assistant-file-type-not-accepted':\n case 'assistant-file-type-not-supported':\n return 'assistant-file-type-not-accepted';\n case 'assistant-file-upload-failed':\n case 'assistant-file-unavailable':\n return 'assistant-file-upload-failed';\n default:\n return 'assistant-file-upload-refused';\n }\n}\n\nfunction startsWith(head: Uint8Array, signature: number[]): boolean {\n return head.length >= signature.length && signature.every((byte, index) => head[index] === byte);\n}\n\nfunction indexOf(head: Uint8Array, signature: number[]): number {\n for (let start = 0; start + signature.length <= head.length; start++) {\n if (signature.every((byte, index) => head[start + index] === byte)) {\n return start;\n }\n }\n return -1;\n}\n","import { AgentSubjectSearch, AgentSubjectType, AgentSubjectWork, AgentSubjectWorkProposal } from '@newheap/platform-ai-chat';\nimport { NhAssistantMockDivision, NhAssistantMockSubjectType } from './nh-assistant-mock.models';\nimport { mockFailure as failure } from './nh-assistant-mock-admin-shared';\n\n/** A mock response: status plus optional JSON body. */\ninterface MockResult {\n status: number;\n body?: unknown;\n}\n\nconst dashCase = /^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/;\nconst minQueryLength = 2;\nconst maxQueryLength = 100;\nconst defaultLimit = 20;\nconst maxLimit = 50;\nconst placeholder = '{id}';\n\n/** The platform's type of the whole application, which the server registers itself. */\nconst systemType = 'nh-system';\n/** The whole application as one subject, for agents that work app-wide. */\nconst systemGlobalId = 'global';\n/** The whole application in one division, for agents that work per division. */\nconst divisionPrefix = 'division-';\nconst systemNames: Record<string, string> = { en: 'The whole application', nl: 'De hele applicatie' };\n\n/** A subject as the mock's resolvers describe it to the caller. */\nexport interface NhAssistantMockDescribedSubject {\n subjectType: string;\n subjectId: string;\n displayName: string;\n typeName: string | null;\n link: string | null;\n role: 'reader' | 'participant' | 'approver';\n /** The whole application app-wide (`global`) or in one division. */\n scope: 'object' | 'global' | 'division';\n}\n\n/**\n * The subject types of the mock API, as the application's resolvers describe them on the server:\n * their names per language in the run catalog, the search people use to choose a subject and the\n * name of a subject chosen by id. The scenario is checked like the server checks the registration\n * at startup, and every request is checked like the server checks it. Next to the scenario's types\n * the catalog lists the platform's `nh-system`, the whole application, as the server does: app-wide\n * as `nh-system/global`, and with the scenario's `divisions` per division, which people then find\n * by name.\n */\nexport class NhAssistantMockSubjects {\n private readonly types: NhAssistantMockSubjectType[];\n private readonly divisions: NhAssistantMockDivision[];\n\n constructor(\n types: readonly NhAssistantMockSubjectType[] = [],\n divisions: readonly NhAssistantMockDivision[] = [],\n private readonly openProposals: (subjectType: string, subjectId: string) => AgentSubjectWorkProposal[] = () => []\n ) {\n const ids = new Set<string>();\n for (const type of types) {\n if (!dashCase.test(type.id) || type.id.length > 100) {\n throw new Error(`Mock subject type '${type.id}' is not a dash-case id of at most 100 characters.`);\n }\n if (type.id.startsWith('nh-')) {\n throw new Error(`Mock subject type '${type.id}' starts with 'nh-', which the platform reserves.`);\n }\n if (ids.has(type.id)) {\n throw new Error(`Mock subject type '${type.id}' is listed twice.`);\n }\n ids.add(type.id);\n validateNames(type.id, type.names, type.fallbackLanguage ?? 'en');\n validateNames(type.id, type.pluralNames, type.fallbackLanguage ?? 'en');\n if (type.pluralNames && !type.names) {\n throw new Error(`Mock subject type '${type.id}' has plural names but no names.`);\n }\n if (type.link != null && !isValidLinkTemplate(type.link)) {\n throw new Error(`Mock subject type '${type.id}' has an invalid link template '${type.link}'.`);\n }\n }\n this.types = [...types].sort((left, right) => left.id.localeCompare(right.id));\n for (const division of divisions) {\n if (!/^[0-9a-f]{8}-?[0-9a-f]{4}-?[0-9a-f]{4}-?[0-9a-f]{4}-?[0-9a-f]{12}$/i.test(division.id)) {\n throw new Error(`Mock division '${division.id}' is not a GUID.`);\n }\n }\n this.divisions = [...divisions].sort((left, right) => left.name.localeCompare(right.name));\n }\n\n /**\n * The subject as the caller sees it, or `null` when it does not exist or the caller may not read\n * it; `undefined` for an unknown type. The caller reads the whole application, and decides there\n * as an administrator.\n */\n describe(typeId: string, subjectId: string, language: string | null, administrator: boolean): NhAssistantMockDescribedSubject | null | undefined {\n if (typeId === systemType) {\n const name = systemName(language);\n if (subjectId === systemGlobalId) {\n return { subjectType: systemType, subjectId, displayName: name, typeName: name, link: null, role: administrator ? 'approver' : 'reader', scope: 'global' };\n }\n const division = this.division(subjectId);\n return division\n ? { subjectType: systemType, subjectId, displayName: division.name, typeName: name, link: null, role: administrator ? 'approver' : 'reader', scope: 'division' }\n : null;\n }\n const type = this.types.find(item => item.id === typeId);\n if (!type) {\n return undefined;\n }\n const subject = (type.subjects ?? []).find(item => item.id === subjectId && item.readable !== false);\n return subject\n ? {\n subjectType: type.id,\n subjectId: subject.id,\n displayName: subject.displayName,\n typeName: type.names ? pick(type.names, type.fallbackLanguage ?? 'en', language) : null,\n link: linkFor(type, subject.id),\n role: subject.role ?? 'participant',\n scope: 'object'\n }\n : null;\n }\n\n /** A listed division the caller works in, by the id of its subject `division-{id:N}`. */\n private division(subjectId: string): NhAssistantMockDivision | undefined {\n return this.divisions.find(division => division.readable !== false && divisionSubjectId(division) === subjectId);\n }\n\n /** The run catalog's subject types in the request's language, the platform's among them, by id. */\n catalog(language: string | null): AgentSubjectType[] {\n const application: AgentSubjectType[] = this.types.map(type => ({\n id: type.id,\n name: pick(type.names, type.fallbackLanguage ?? 'en', language) ?? type.id,\n pluralName: pick(type.pluralNames, type.fallbackLanguage ?? 'en', language),\n entityType: type.entityType ?? null,\n entityTypeFull: type.entityTypeFull ?? null,\n link: type.link ?? null,\n searchable: isSearchable(type),\n isSystem: false\n }));\n const system: AgentSubjectType = {\n id: systemType,\n name: systemName(language),\n pluralName: null,\n entityType: null,\n entityTypeFull: null,\n link: null,\n // With listed divisions the whole application is searched for them.\n searchable: this.divisions.length > 0,\n isSystem: true\n };\n return [...application, system].sort((left, right) => left.id.localeCompare(right.id));\n }\n\n /** `GET subjects/{type}/search` and `GET subjects/{type}/{id}/work`; `null` for other paths. */\n handle(method: string, segments: string[], query: URLSearchParams, language: string | null): MockResult | null {\n if (segments.length === 3 && segments[2] === 'search') {\n return method === 'GET' ? this.search(segments[1], query) : { status: 405 };\n }\n if (segments.length === 4 && segments[3] === 'work') {\n return method === 'GET' ? this.work(segments[1], segments[2], language) : { status: 405 };\n }\n return null;\n }\n\n private search(typeId: string, query: URLSearchParams): MockResult {\n const type = this.types.find(item => item.id === typeId);\n if (!type && typeId !== systemType) {\n return failure('assistant-subject-type-unknown');\n }\n const text = (query.get('query') ?? '').trim();\n if (text.length < minQueryLength || text.length > maxQueryLength) {\n return failure('assistant-validation', { query: ['invalid'] });\n }\n // The whole application is not searched, but its divisions are, when the application lists them.\n if (!type) {\n return this.divisions.length > 0 ? this.searchDivisions(text, query) : failure('assistant-subject-search-unavailable');\n }\n if (!isSearchable(type)) {\n return failure('assistant-subject-search-unavailable');\n }\n\n const limit = Math.min(Math.max(Number(query.get('limit') ?? defaultLimit) || defaultLimit, 1), maxLimit);\n const lowered = text.toLocaleLowerCase();\n const items = (type.subjects ?? [])\n .filter(subject => subject.readable !== false)\n .filter(subject => subject.displayName.toLocaleLowerCase().includes(lowered) || subject.id.toLocaleLowerCase().includes(lowered))\n .slice(0, limit)\n .map(subject => ({\n type: type.id,\n id: subject.id,\n displayName: subject.displayName,\n scopeKey: subject.scopeKey ?? 'global',\n divisionId: subject.divisionId ?? null,\n link: linkFor(type, subject.id)\n }));\n const body: AgentSubjectSearch = { subjectType: type.id, items };\n return { status: 200, body };\n }\n\n /** The divisions the caller works in whose name contains the text, ordered by name. */\n private searchDivisions(text: string, query: URLSearchParams): MockResult {\n const limit = Math.min(Math.max(Number(query.get('limit') ?? defaultLimit) || defaultLimit, 1), maxLimit);\n const lowered = text.toLocaleLowerCase();\n const items = this.divisions\n .filter(division => division.readable !== false && division.name.toLocaleLowerCase().includes(lowered))\n .slice(0, limit)\n .map(division => ({\n type: systemType,\n id: divisionSubjectId(division),\n displayName: division.name,\n scopeKey: `division:${guidN(division.id)}`,\n divisionId: division.id,\n link: null\n }));\n const body: AgentSubjectSearch = { subjectType: systemType, items };\n return { status: 200, body };\n }\n\n /**\n * The name of a subject chosen by id and the proposals the scenario lists on it; the mock runs no\n * agents, so it has no other agent work. A malformed reference is invalid, an unknown or unreadable\n * subject not found.\n */\n private work(typeId: string, subjectId: string, language: string | null): MockResult {\n if (!dashCase.test(typeId) || typeId.length > 100 || subjectId.trim().length === 0 || subjectId.length > 200 || subjectId.trim() !== subjectId) {\n return failure('assistant-subject-invalid');\n }\n if (typeId === systemType) {\n return this.systemWork(subjectId, language);\n }\n const type = this.types.find(item => item.id === typeId);\n if (!type) {\n return failure('assistant-subject-type-unknown');\n }\n const subject = (type.subjects ?? []).find(item => item.id === subjectId && item.readable !== false);\n if (!subject) {\n return failure('assistant-subject-not-found');\n }\n\n const body: AgentSubjectWork = {\n subjectType: type.id,\n subjectId: subject.id,\n subjectDisplayName: subject.displayName,\n subjectTypeName: type.names ? pick(type.names, type.fallbackLanguage ?? 'en', language) : null,\n subjectLink: linkFor(type, subject.id),\n role: 'reader',\n agents: [],\n openProposals: this.openProposals(type.id, subject.id)\n };\n return { status: 200, body };\n }\n\n /**\n * The whole application as the server names it: \"The whole application\" in the reader's language,\n * without a link, and in a division the division's name. A division the scenario does not list, or\n * that the caller does not work in, is not found.\n */\n private systemWork(subjectId: string, language: string | null): MockResult {\n const division = subjectId === systemGlobalId ? null : this.division(subjectId);\n if (subjectId !== systemGlobalId && !division) {\n return failure('assistant-subject-not-found');\n }\n\n const name = systemName(language);\n const body: AgentSubjectWork = {\n subjectType: systemType,\n subjectId,\n subjectDisplayName: division?.name ?? name,\n subjectTypeName: name,\n subjectLink: null,\n role: 'reader',\n agents: [],\n openProposals: this.openProposals(systemType, subjectId)\n };\n return { status: 200, body };\n }\n}\n\n/** The name of the whole application in the request's language, English otherwise. */\nfunction systemName(language: string | null): string {\n return pick(systemNames, 'en', language) ?? systemNames['en'];\n}\n\n/** The subject of the whole application in a division: `division-` and the id without dashes. */\nexport function divisionSubjectId(division: NhAssistantMockDivision): string {\n return divisionPrefix + guidN(division.id);\n}\n\nfunction guidN(id: string): string {\n return id.replace(/-/g, '').toLowerCase();\n}\n\nfunction isSearchable(type: NhAssistantMockSubjectType): boolean {\n return type.searchable ?? (type.subjects?.length ?? 0) > 0;\n}\n\nfunction linkFor(type: NhAssistantMockSubjectType, subjectId: string): string | null {\n return type.link ? type.link.replace(placeholder, encodeURIComponent(subjectId)) : null;\n}\n\nfunction validateNames(typeId: string, names: Record<string, string> | undefined, fallbackLanguage: string): void {\n if (!names) {\n return;\n }\n for (const [language, name] of Object.entries(names)) {\n if (!/^[A-Za-z]{2,8}(-[A-Za-z0-9]{1,8})*$/.test(language)) {\n throw new Error(`Mock subject type '${typeId}' has a name in '${language}', which is not a culture name.`);\n }\n if (name.trim().length === 0 || name.trim().length > 100) {\n throw new Error(`Mock subject type '${typeId}' has a name in '${language}' that is empty or longer than 100 characters.`);\n }\n }\n if (!Object.keys(names).some(language => language.toLowerCase() === fallbackLanguage.toLowerCase())) {\n throw new Error(`Mock subject type '${typeId}' has no name in its fallback language '${fallbackLanguage}'.`);\n }\n}\n\n/** The name in the language, another culture of that language, else the fallback language, as the server picks. */\n/** A text in the request's language: the culture, its language, another culture of it, else the fallback language. */\nexport function mockPickText(names: Record<string, string> | undefined, fallbackLanguage: string, language: string | null): string | null {\n return pick(names, fallbackLanguage, language);\n}\n\nfunction pick(names: Record<string, string> | undefined, fallbackLanguage: string, language: string | null): string | null {\n if (!names) {\n return null;\n }\n const entries = Object.entries(names);\n const find = (wanted: string) => entries.find(([key]) => key.toLowerCase() === wanted.toLowerCase())?.[1];\n const requested = language?.split(',')[0]?.split(';')[0]?.trim() ?? '';\n const base = requested.split('-')[0];\n return (requested ? find(requested) : undefined)\n ?? (base ? find(base) : undefined)\n ?? (base ? entries.filter(([key]) => key.split('-')[0].toLowerCase() === base.toLowerCase()).sort(([left], [right]) => left.localeCompare(right))[0]?.[1] : undefined)\n ?? find(fallbackLanguage)\n ?? null;\n}\n\n/** One `{id}` in a path that starts with one slash, or in the path or query of an `https` address. */\nfunction isValidLinkTemplate(template: string): boolean {\n if (/[\\s{}]/.test(template.split(placeholder).join('')) || template.split(placeholder).length !== 2) {\n return false;\n }\n if (template.startsWith('/')) {\n return template.length > 1 && template[1] !== '/' && template[1] !== '\\\\';\n }\n if (!template.toLowerCase().startsWith('https://')) {\n return false;\n }\n const pathStart = template.indexOf('/', 'https://'.length);\n return pathStart > 0 && template.indexOf(placeholder) > pathStart;\n}\n","import {\n AdminAgent,\n AgentConsultationList,\n AgentLatestRun,\n AgentProposal,\n AgentObjectAgent,\n AgentObjectAgents,\n AgentRun,\n AgentRunHistory,\n AgentRunHistoryItem,\n AgentRunMcpSkip,\n AgentRunResult,\n AgentRunStatus,\n AgentThread,\n AgentThreadLookup,\n AgentTriggerReceipt,\n LiveAgentWorkChanged\n} from '@newheap/platform-ai-chat';\nimport { NhAssistantMockRun, NhAssistantMockRunNow, NhAssistantMockScenario } from './nh-assistant-mock.models';\nimport { NhAssistantMockResult, mockFailure as failure } from './nh-assistant-mock-admin-shared';\nimport { NhAssistantMockDescribedSubject, NhAssistantMockSubjects, mockPickText } from './nh-assistant-mock-subjects';\nimport { mockSystemSubjectType, mockWorksOnCovers } from './nh-assistant-mock-works-on';\n\n/** What the agent runs read of the mock's agents and caller. */\nexport interface NhAssistantMockAgentRunContext {\n /** Every agent of the administration. */\n agents(): AdminAgent[];\n /** Whether the caller passes the administration policy. */\n administers(): boolean;\n /** The scenario's proposals in a thread; `null` when it lists none there. */\n threadProposals?(conversationId: string): AgentProposal[] | null;\n /** The scenario's consultations of a thread's agent; `null` when it lists none there. */\n threadConsultations?(conversationId: string): AgentConsultationList | null;\n /** The scenario's proposals of a run, also those it placed at other objects, oldest first. */\n runProposals?(runId: string): AgentProposal[];\n /** Announces that an agent's work changed, as the server's live updates do. */\n workChanged?(change: LiveAgentWorkChanged, agentId: string): void;\n}\n\ninterface StoredThread {\n conversationId: string;\n agentId: string;\n subject: NhAssistantMockDescribedSubject;\n runs: AgentRun[];\n openProposals: number;\n /** The agent's shadow thread, which only administrators see. */\n shadow?: boolean;\n}\n\n/** A request's agent and subject, read as the server reads them, or why they cannot be. */\ntype SubjectRead =\n | { failure: NhAssistantMockResult }\n | { agent: AdminAgent; subject: NhAssistantMockDescribedSubject | null };\n\nconst dashCase = /^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/;\nconst maxMessage = 8_000;\nconst maxSubjectId = 200;\nconst maxAgentId = 128;\nconst resultPreview = 300;\nconst maxResult = 20_000;\nconst maxItemsPerPage = 50;\nconst dayMs = 24 * 60 * 60 * 1000;\nconst activeStatuses = ['queued', 'running', 'waiting-for-approval'];\nconst retryableStatuses = ['failed', 'cancelled'];\nconst runStatuses: readonly AgentRunStatus[] = ['queued', 'running', 'waiting-for-approval', 'completed', 'failed', 'cancelled'];\n\n/** A run history's filter as the server reads it. */\ninterface RunFilter {\n agentId: string | null;\n subjectType: string | null;\n subjectId: string | null;\n status: string | null;\n from: number | null;\n to: number | null;\n page: number;\n itemsPerPage: number;\n}\n\n/**\n * Agents run by hand in the mock API, which runs no agents itself: `POST threads/start` checks who\n * may run the agent as the server does (on an object the participant role, on the whole application\n * the agent's run policy, by default the administration policy; what the agent works on, with its\n * scope; its required policy; shadow for administrators only), then the agent's state: a stopped\n * agent or one disabled in code is refused with `409`, a paused one answers `202 waiting` with\n * `assistant-agent-paused`, and `runNow.dailyLimit` refuses more runs a day with `409\n * assistant-trigger-rate-limited`. Otherwise it records a run that ends at once as the scenario's\n * `runNow` says, and `GET subjects/{type}/{id}/agents`, `GET threads` and the thread's runs show it.\n * `POST threads/open` creates the thread without a run for whoever may start the agent;\n * `POST runs/{id}/cancel` and `POST runs/{id}/retry` cancel, resume or restart a run with the server's\n * roles. The thread's memory, artifacts and consultations are empty; its proposals are those the\n * scenario lists in it. The scenario's `runs` happened before; `GET runs`, `GET runs/{id}` and the\n * administration's `GET admin/agents/{id}/runs` list them and the runs by hand, with the server's\n * filters, field errors and visibility.\n */\nexport class NhAssistantMockAgentRuns {\n private readonly threads = new Map<string, StoredThread>();\n /** The answer of each run, by run id, at most 20,000 characters. */\n private readonly results = new Map<string, string | null>();\n /** The answer per culture of the runs whose rules wrote it per culture, by run id. */\n private readonly localizedResults = new Map<string, Readonly<Record<string, string>>>();\n /** The runs whose answer was longer and was cut. */\n private readonly truncated = new Set<string>();\n /** The personal MCP servers each run left out, by run id. */\n private readonly mcpSkips = new Map<string, AgentRunMcpSkip[]>();\n private sequence = 0;\n\n constructor(\n private readonly scenario: NhAssistantMockScenario,\n private readonly subjects: NhAssistantMockSubjects,\n private readonly context: NhAssistantMockAgentRunContext,\n private readonly now: () => string\n ) {\n for (const seeded of scenario.runs ?? []) {\n this.seed(seeded);\n }\n }\n\n /**\n * `GET runs`, `GET runs/{id}`, `GET runs/{id}/artifacts/{id}/content`, `POST runs/{id}/cancel` and\n * `POST runs/{id}/retry`; `null` for other paths.\n */\n handleRuns(method: string, segments: string[], query: URLSearchParams, body: unknown, language: string | null): NhAssistantMockResult | null {\n if (segments[0] !== 'runs' || ![1, 2, 3, 5].includes(segments.length)) {\n return null;\n }\n if (segments.length === 3) {\n if (segments[2] !== 'cancel' && segments[2] !== 'retry') {\n return null;\n }\n if (method !== 'POST') {\n return { status: 405 };\n }\n return segments[2] === 'cancel' ? this.cancel(segments[1], language) : this.retry(segments[1], body, language);\n }\n if (method !== 'GET') {\n return segments.length === 1 || segments.length === 2 ? { status: 405 } : null;\n }\n if (segments.length === 1) {\n const read = readFilter(query, true);\n if ('errors' in read) {\n return failure('assistant-run-filter-invalid', read.errors);\n }\n return { status: 200, body: this.history(read.filter, language, false) };\n }\n\n const found = this.findRun(segments[1]);\n if (!found || !(this.context.administers() || this.mayView(found.thread, language))) {\n return failure('assistant-run-not-found');\n }\n if (segments.length === 5) {\n // The mock's runs save no files.\n return segments[2] === 'artifacts' && segments[4] === 'content' ? failure('assistant-artifact-not-found') : null;\n }\n\n const result: AgentRunResult = {\n run: this.toHistoryItem(found.thread, found.run, language),\n result: this.answerOf(found.run.id, language),\n resultTruncated: this.truncated.has(found.run.id),\n summary: found.run.summary,\n proposals: this.context.runProposals?.(found.run.id) ?? [],\n hiddenProposals: 0,\n artifacts: [],\n canOpenConversation: this.mayView(found.thread, language)\n };\n return { status: 200, body: result };\n }\n\n /**\n * `GET admin/agents/{id}/runs`: every run of the agent, for administrators. The filter is checked\n * before the agent, as on the server.\n */\n handleAgentRuns(method: string, agentId: string, query: URLSearchParams, language: string | null): NhAssistantMockResult {\n if (method !== 'GET') {\n return { status: 405 };\n }\n if (!this.context.administers()) {\n return failure('assistant-forbidden');\n }\n const read = readFilter(query, false);\n if ('errors' in read) {\n return failure('assistant-run-filter-invalid', read.errors);\n }\n if (!this.context.agents().some(agent => agent.id === agentId)) {\n return failure('assistant-agent-not-found');\n }\n return { status: 200, body: this.history({ ...read.filter, agentId }, language, true) };\n }\n\n /** `POST threads/start`, `POST threads/open`, `GET threads` and `GET threads/{id}/…`; `null` for other paths. */\n handleThreads(method: string, segments: string[], query: URLSearchParams, body: unknown, language: string | null): NhAssistantMockResult | null {\n if (segments.length === 2 && segments[1] === 'start') {\n return method === 'POST' ? this.start(body, language) : { status: 405 };\n }\n if (segments.length === 2 && segments[1] === 'open') {\n return method === 'POST' ? this.open(body, language) : { status: 405 };\n }\n if (segments.length === 1) {\n return method === 'GET' ? this.lookup(query, language) : { status: 405 };\n }\n if (segments.length === 3 && method === 'GET') {\n const listed = segments[2] === 'proposals'\n ? this.context.threadProposals?.(segments[1]) ?? null\n : segments[2] === 'consultations' ? this.context.threadConsultations?.(segments[1]) ?? null : null;\n if (listed) {\n return { status: 200, body: listed };\n }\n const thread = this.threadOf(segments[1]);\n if (!thread) {\n return failure('assistant-conversation-not-found');\n }\n switch (segments[2]) {\n case 'runs':\n return { status: 200, body: { items: [...thread.runs].reverse(), total: thread.runs.length } };\n case 'proposals':\n case 'artifacts':\n return { status: 200, body: [] };\n case 'memory':\n return { status: 200, body: { configured: false, schemaVersion: 1, memory: null, updatedAt: null } };\n case 'consultations':\n return { status: 200, body: { items: [], total: 0 } };\n default:\n return null;\n }\n }\n return null;\n }\n\n /** `GET subjects/{type}/{id}/agents`; `null` for other paths. */\n handleSubjects(method: string, segments: string[], language: string | null): NhAssistantMockResult | null {\n if (segments.length !== 4 || segments[3] !== 'agents') {\n return null;\n }\n if (method !== 'GET') {\n return { status: 405 };\n }\n\n const [, type, id] = segments;\n if (!validSubject(type, id)) {\n return failure('assistant-subject-invalid');\n }\n const subject = this.subjects.describe(type, id, language, this.context.administers());\n if (subject === undefined) {\n return failure('assistant-subject-type-unknown');\n }\n if (subject === null) {\n return failure('assistant-subject-not-found');\n }\n\n const agents: AgentObjectAgent[] = this.context.agents()\n .filter(agent => this.isWorking(agent) && this.mayUse(agent) && worksOn(agent, subject) && (!agent.shadowOf || this.context.administers()))\n .sort((left, right) => left.id.localeCompare(right.id))\n .map(agent => {\n const thread = this.threads.get(key(agent.id, subject));\n return {\n agentId: agent.id,\n displayNameKey: this.nameKeyOf(agent),\n descriptionKey: agent.source === 'code'\n ? this.scenario.agents.find(item => item.id === agent.id)?.descriptionKey ?? agent.description\n : agent.description,\n canStart: this.canStart(agent, subject),\n conversationId: thread?.conversationId ?? null,\n latestRun: thread ? latestRun(thread, runId => this.answerOf(runId, language)) : null,\n openProposals: thread?.openProposals ?? 0\n };\n });\n const body: AgentObjectAgents = {\n subjectType: subject.subjectType,\n subjectId: subject.subjectId,\n subjectDisplayName: subject.displayName,\n subjectTypeName: subject.typeName,\n subjectLink: subject.link,\n role: subject.role,\n agents\n };\n return { status: 200, body };\n }\n\n /**\n * An agent's work on one subject of the whole application, as a board tile shows it: its thread,\n * latest run, open proposals (those the runs left and those the scenario lists in the thread) and\n * whether the caller may run it there now.\n */\n boardWork(agent: AdminAgent, subject: NhAssistantMockDescribedSubject, language: string | null = null): NhAssistantMockBoardWork {\n const thread = this.threads.get(key(agent.id, subject));\n const listed = thread ? (this.context.threadProposals?.(thread.conversationId) ?? []).filter(proposal => proposal.status === 'pending').length : 0;\n return {\n conversationId: thread?.conversationId ?? null,\n latestRun: thread ? latestRun(thread, runId => this.answerOf(runId, language)) : null,\n openProposals: (thread?.openProposals ?? 0) + listed,\n canStart: this.canStart(agent, subject)\n };\n }\n\n /**\n * Whether the agent works for people now and the caller sees its results for the whole application:\n * its view policy, by default its required policy.\n */\n maySeeResults(agent: AdminAgent): boolean {\n return this.isWorking(agent) && this.passesViewPolicy(agent);\n }\n\n /** Whether the agent works for people now and the caller may use it. */\n mayUseNow(agent: AdminAgent): boolean {\n return this.isWorking(agent) && this.mayUse(agent);\n }\n\n /** The agent's name as people read it: a translation key in code, the text of an agent created as data. */\n nameOf(agent: AdminAgent): { displayNameKey: string; descriptionKey: string } {\n return {\n displayNameKey: this.nameKeyOf(agent),\n descriptionKey: agent.source === 'code'\n ? this.scenario.agents.find(item => item.id === agent.id)?.descriptionKey ?? agent.description\n : agent.description\n };\n }\n\n private start(body: unknown, language: string | null): NhAssistantMockResult {\n const request = body as { agentId?: unknown; subjectType?: unknown; subjectId?: unknown; message?: unknown } | undefined;\n if (!request || (request.message !== undefined && request.message !== null && (typeof request.message !== 'string' || request.message.length > maxMessage))) {\n return failure('assistant-message-invalid');\n }\n const read = this.readSubject(request.agentId, request.subjectType, request.subjectId, language);\n if ('failure' in read) {\n return read.failure;\n }\n // A subject the caller may not read gives no role on it.\n if (read.subject === null) {\n return failure('assistant-subject-access-denied');\n }\n const refusal = this.refusal(read.agent, read.subject);\n if (refusal) {\n return failure(refusal);\n }\n\n return this.startNow(read.agent, read.subject);\n }\n\n /**\n * Starts a run by hand after the start checks, as the server's triggers do: the agent's state, the\n * daily limit, then the run with the scenario's outcome. A paused agent answers `waiting`.\n */\n private startNow(agent: AdminAgent, subject: NhAssistantMockDescribedSubject): NhAssistantMockResult {\n const stateRefusal = refusalOfState(agent);\n if (stateRefusal) {\n return failure(stateRefusal);\n }\n\n const runNow: NhAssistantMockRunNow = this.scenario.runNow?.[agent.id] ?? {};\n const threadKey = key(agent.id, subject);\n const existing = this.threads.get(threadKey);\n if (runNow.dailyLimit !== undefined && existing && this.runsByHandToday(existing) >= runNow.dailyLimit) {\n return failure('assistant-trigger-rate-limited');\n }\n\n const outcome = runNow.outcome ?? 'started';\n if (outcome === 'ignored' || outcome === 'deferred') {\n // Nothing started yet: a deferred start names no run or thread until the change is saved.\n return accepted({ triggerId: 'manual', outcome, runId: null, conversationId: null, reasonCode: null });\n }\n\n const thread = existing ?? { conversationId: this.nextId(), agentId: agent.id, subject, runs: [], openProposals: 0 };\n this.threads.set(threadKey, thread);\n if (agent.runState === 'paused' || outcome === 'waiting') {\n // The start waits in the agent's thread and runs when the agent, or its skill, resumes.\n const reasonCode = agent.runState === 'paused' ? 'assistant-agent-paused' : 'assistant-skill-paused';\n return accepted({ triggerId: 'manual', outcome: 'waiting', runId: null, conversationId: thread.conversationId, reasonCode });\n }\n\n const run = this.recordRun(thread, agent, runNow);\n return accepted({ triggerId: 'manual', outcome, runId: run.id, conversationId: thread.conversationId, reasonCode: null });\n }\n\n /** A run by hand that ends at once with the scenario's status, result and proposals. */\n private recordRun(thread: StoredThread, agent: AdminAgent, runNow: NhAssistantMockRunNow): AgentRun {\n const now = this.now();\n const status = runNow.status ?? 'completed';\n const ended = !activeStatuses.includes(status);\n const run: AgentRun = {\n id: this.nextId(),\n conversationId: thread.conversationId,\n triggerId: 'manual',\n status,\n failureClass: status === 'failed' ? 'permanent' : null,\n failureCode: status === 'failed' ? 'assistant-turn-failed' : null,\n initiatorActorId: 'current-user',\n accountableOwnerId: `assistant-agent:${agent.id}`,\n attempt: 1,\n agentVersion: agent.version,\n toolCalls: 0,\n inputTokens: 0,\n outputTokens: 0,\n proposalCount: runNow.proposals ?? 0,\n summary: runNow.result === undefined || runNow.result === null ? null : runNow.result.slice(0, 600),\n shadow: false,\n createdAt: now,\n startedAt: status === 'queued' ? null : now,\n endedAt: ended ? now : null,\n backgroundOperationId: null,\n kind: 'model'\n };\n thread.runs.push(run);\n this.keep(run.id, runNow.result, runNow.results);\n thread.openProposals += runNow.proposals ?? 0;\n this.context.workChanged?.({\n conversationId: thread.conversationId,\n reason: 'run',\n approvalId: null,\n runId: run.id,\n subjectType: thread.subject.subjectType,\n subjectId: thread.subject.subjectId\n }, agent.id);\n return run;\n }\n\n /** The runs by hand of a thread in the last day, which the daily limit counts. */\n private runsByHandToday(thread: StoredThread): number {\n const now = Date.parse(this.now());\n return thread.runs.filter(run => run.triggerId === 'manual' && now - Date.parse(run.createdAt) < dayMs).length;\n }\n\n /**\n * `POST threads/open`: the agent's thread about the subject, created without a run when it is\n * missing. Readers open an existing thread; creating one needs what a start by hand needs, and a\n * refusal answers `409` for what the agent does not work on and `403` otherwise.\n */\n private open(body: unknown, language: string | null): NhAssistantMockResult {\n const request = body as { agentId?: unknown; subjectType?: unknown; subjectId?: unknown } | undefined;\n if (!request || typeof request !== 'object') {\n return failure('assistant-subject-invalid');\n }\n const read = this.readSubject(request.agentId, request.subjectType, request.subjectId, language);\n if ('failure' in read) {\n return read.failure;\n }\n const { agent, subject } = read;\n if (subject === null || !this.mayReadThreadOf(agent, subject)) {\n return failure('assistant-subject-not-found');\n }\n if (agent.shadowOf && !this.context.administers()) {\n return failure('assistant-agent-not-found');\n }\n\n const threadKey = key(agent.id, subject);\n let thread = this.threads.get(threadKey);\n if (!thread) {\n const refusal = this.refusal(agent, subject);\n if (refusal) {\n return failure(refusal === 'assistant-agent-does-not-work-on' ? refusal : 'assistant-subject-access-denied');\n }\n thread = { conversationId: this.nextId(), agentId: agent.id, subject, runs: [], openProposals: 0 };\n this.threads.set(threadKey, thread);\n }\n\n const lookup: AgentThreadLookup = { thread: toThread(thread), canStart: this.canStart(agent, subject), role: subject.role };\n return { status: 200, body: lookup };\n }\n\n private lookup(query: URLSearchParams, language: string | null): NhAssistantMockResult {\n const read = this.readSubject(query.get('agentId'), query.get('subjectType') ?? '', query.get('subjectId') ?? '', language);\n if ('failure' in read) {\n return read.failure;\n }\n const { agent, subject } = read;\n if (subject === null || !this.mayReadThreadOf(agent, subject)) {\n return failure('assistant-subject-not-found');\n }\n if (agent.shadowOf && !this.context.administers()) {\n return failure('assistant-agent-not-found');\n }\n\n const thread = this.threads.get(key(agent.id, subject));\n const body: AgentThreadLookup = {\n thread: thread ? toThread(thread) : null,\n canStart: this.canStart(agent, subject),\n role: subject.role\n };\n return { status: 200, body };\n }\n\n /**\n * `POST runs/{id}/cancel`: cancels an open run and withdraws its open proposals; needs the\n * participant role on the thread. An ended run stays as it is.\n */\n private cancel(runId: string, language: string | null): NhAssistantMockResult {\n const found = this.findRun(runId);\n if (!found) {\n return failure('assistant-run-not-found');\n }\n const role = this.roleOn(found.thread, language);\n if (role === null) {\n return failure('assistant-conversation-not-found');\n }\n if (role === 'reader') {\n return failure('assistant-subject-access-denied');\n }\n if (activeStatuses.includes(found.run.status)) {\n found.run.status = 'cancelled';\n found.run.endedAt = this.now();\n found.thread.openProposals = Math.max(0, found.thread.openProposals - found.run.proposalCount);\n }\n return { status: 202 };\n }\n\n /**\n * `POST runs/{id}/retry`: resumes a failed or cancelled run (`queued`), or restarts the agent in the\n * same thread like a start by hand; needs the approver role on the thread. The mock's resumed\n * attempt ends at once as the scenario's `runNow` says.\n */\n private retry(runId: string, body: unknown, language: string | null): NhAssistantMockResult {\n const mode = (body as { mode?: unknown } | undefined)?.mode ?? 'resume';\n if (mode !== 'resume' && mode !== 'restart') {\n return failure('assistant-run-not-retryable');\n }\n const found = this.findRun(runId);\n if (!found) {\n return failure('assistant-run-not-found');\n }\n const role = this.roleOn(found.thread, language);\n if (role === null) {\n return failure('assistant-conversation-not-found');\n }\n if (role !== 'approver') {\n return failure('assistant-subject-access-denied');\n }\n if (!retryableStatuses.includes(found.run.status)) {\n return failure('assistant-run-not-retryable');\n }\n\n const agent = this.context.agents().find(item => item.id === found.thread.agentId);\n if (!agent) {\n return failure('assistant-agent-not-found');\n }\n if (mode === 'restart') {\n return this.startNow(agent, found.thread.subject);\n }\n\n const runNow = this.scenario.runNow?.[agent.id] ?? {};\n const status = runNow.status ?? 'completed';\n const now = this.now();\n found.run.status = status;\n found.run.attempt += 1;\n found.run.failureClass = status === 'failed' ? 'permanent' : null;\n found.run.failureCode = status === 'failed' ? 'assistant-turn-failed' : null;\n found.run.startedAt = now;\n found.run.endedAt = activeStatuses.includes(status) ? null : now;\n return accepted({ triggerId: found.run.triggerId, outcome: 'queued', runId: found.run.id, conversationId: found.run.conversationId, reasonCode: null });\n }\n\n /**\n * The request's agent and subject as the server reads them: an unknown agent is not found, a\n * malformed subject reference invalid and an unknown type unknown. `subject` is `null` for a subject\n * the caller may not read.\n */\n private readSubject(agentId: unknown, subjectType: unknown, subjectId: unknown, language: string | null): SubjectRead {\n const agent = typeof agentId === 'string' ? this.context.agents().find(item => item.id === agentId) : undefined;\n if (!agent) {\n return { failure: failure('assistant-agent-not-found') };\n }\n const type = typeof subjectType === 'string' ? subjectType : '';\n const id = typeof subjectId === 'string' ? subjectId : '';\n if (!validSubject(type, id)) {\n return { failure: failure('assistant-subject-invalid') };\n }\n const subject = this.subjects.describe(type, id, language, this.context.administers());\n if (subject === undefined) {\n return { failure: failure('assistant-subject-type-unknown') };\n }\n return { agent, subject };\n }\n\n /**\n * Why the caller may not run the agent on the subject, in the server's order: the role, the agent,\n * what it works on, then the run policy and shadow. The agent's state is checked when the run\n * starts.\n */\n private refusal(agent: AdminAgent, subject: NhAssistantMockDescribedSubject): string | null {\n const system = subject.subjectType === mockSystemSubjectType;\n if (!system && subject.role === 'reader') {\n return 'assistant-subject-access-denied';\n }\n if (!this.mayUse(agent)) {\n return 'assistant-agent-forbidden';\n }\n if (!worksOn(agent, subject)) {\n return 'assistant-agent-does-not-work-on';\n }\n if (system && !(agent.runPolicy ? this.passes(agent.runPolicy) : this.context.administers())) {\n return 'assistant-agent-forbidden';\n }\n if (agent.shadow?.shadow && !this.context.administers()) {\n return 'assistant-agent-forbidden';\n }\n return null;\n }\n\n /** Whether the caller may start the agent now, as `canStart` says: it works and nothing refuses it. */\n private canStart(agent: AdminAgent, subject: NhAssistantMockDescribedSubject): boolean {\n return this.isWorking(agent) && this.refusal(agent, subject) === null;\n }\n\n /** The caller's live role on a thread, or `null` when the caller may not see it. */\n private roleOn(thread: StoredThread, language: string | null): 'reader' | 'participant' | 'approver' | null {\n if (!this.mayView(thread, language)) {\n return null;\n }\n const subject = this.subjects.describe(thread.subject.subjectType, thread.subject.subjectId, language, this.context.administers());\n return subject?.role ?? null;\n }\n\n /** The agent's thread about the whole application is only for people who pass its view policy. */\n private mayReadThreadOf(agent: AdminAgent, subject: NhAssistantMockDescribedSubject): boolean {\n return subject.scope === 'object' || this.passesViewPolicy(agent);\n }\n\n /** A run history's page of the runs the caller may see, or with `everything` every run, newest first. */\n private history(filter: RunFilter, language: string | null, everything: boolean): AgentRunHistory {\n const matching = [...this.threads.values()]\n .filter(thread => (filter.agentId === null || thread.agentId === filter.agentId)\n && (filter.subjectType === null || thread.subject.subjectType === filter.subjectType)\n && (filter.subjectId === null || thread.subject.subjectId === filter.subjectId)\n && (everything || this.mayView(thread, language)))\n .flatMap(thread => thread.runs\n .filter(run => (filter.status === null || run.status === filter.status)\n && (filter.from === null || Date.parse(run.createdAt) >= filter.from)\n && (filter.to === null || Date.parse(run.createdAt) < filter.to))\n .map(run => ({ thread, run })))\n .sort((left, right) => Date.parse(right.run.createdAt) - Date.parse(left.run.createdAt) || right.run.id.localeCompare(left.run.id));\n const start = (filter.page - 1) * filter.itemsPerPage;\n return {\n items: matching.slice(start, start + filter.itemsPerPage).map(item => this.toHistoryItem(item.thread, item.run, language)),\n total: matching.length,\n limited: false\n };\n }\n\n /**\n * Whether the caller may see the runs of the thread: shadow work for administrators only, an object\n * the caller reads, the whole application by the agent's view policy, by default its required\n * policy.\n */\n private mayView(thread: StoredThread, language: string | null): boolean {\n if (thread.shadow && !this.context.administers()) {\n return false;\n }\n const subject = this.subjects.describe(thread.subject.subjectType, thread.subject.subjectId, language, this.context.administers());\n if (!subject) {\n return false;\n }\n if (subject.scope === 'object') {\n return true;\n }\n const agent = this.context.agents().find(item => item.id === thread.agentId);\n return agent !== undefined && this.passesViewPolicy(agent);\n }\n\n private threadOf(conversationId: string): StoredThread | undefined {\n return [...this.threads.values()].find(item => item.conversationId === conversationId);\n }\n\n private findRun(runId: string): { thread: StoredThread; run: AgentRun } | null {\n for (const thread of this.threads.values()) {\n const run = thread.runs.find(item => item.id === runId);\n if (run) {\n return { thread, run };\n }\n }\n return null;\n }\n\n private toHistoryItem(thread: StoredThread, run: AgentRun, language: string | null): AgentRunHistoryItem {\n const agent = this.context.agents().find(item => item.id === thread.agentId);\n const subject = this.subjects.describe(thread.subject.subjectType, thread.subject.subjectId, language, this.context.administers())\n ?? thread.subject;\n const answer = this.answerOf(run.id, language);\n const preview = answer ?? run.summary;\n return {\n id: run.id,\n conversationId: run.conversationId,\n agentId: thread.agentId,\n agentDisplayNameKey: agent ? this.nameKeyOf(agent) : null,\n subjectType: thread.subject.subjectType,\n subjectId: thread.subject.subjectId,\n subjectDisplayName: subject.displayName,\n subjectTypeName: subject.typeName,\n subjectLink: subject.link,\n triggerId: run.triggerId,\n status: run.status,\n failureClass: run.failureClass,\n failureCode: run.failureCode,\n kind: run.kind ?? 'model',\n skill: run.skill ?? null,\n initiatorActorId: run.initiatorActorId,\n toolCalls: run.toolCalls,\n modelCalls: 0,\n inputTokens: run.inputTokens,\n outputTokens: run.outputTokens,\n proposalCount: run.proposalCount,\n result: preview === null ? null : preview.slice(0, resultPreview),\n resultTruncated: preview !== null && (preview.length > resultPreview || this.truncated.has(run.id)),\n shadow: run.shadow,\n createdAt: run.createdAt,\n startedAt: run.startedAt,\n endedAt: run.endedAt,\n mcpConnectionSkips: this.mcpSkips.get(run.id) ?? []\n };\n }\n\n /** Stores a run of the scenario in its agent's thread on its subject. */\n private seed(seeded: NhAssistantMockRun): void {\n const described = this.subjects.describe(seeded.subjectType, seeded.subjectId, null, true);\n const system = seeded.subjectType === mockSystemSubjectType;\n const subject: NhAssistantMockDescribedSubject = {\n subjectType: seeded.subjectType,\n subjectId: seeded.subjectId,\n displayName: seeded.subjectDisplayName ?? described?.displayName ?? seeded.subjectId,\n typeName: described?.typeName ?? null,\n link: described?.link ?? null,\n role: described?.role ?? 'reader',\n scope: described?.scope ?? (system ? 'global' : 'object')\n };\n const shadow = seeded.shadow === true;\n const threadKey = key(seeded.agentId, subject) + (shadow ? '|shadow' : '');\n const thread = this.threads.get(threadKey)\n ?? { conversationId: this.nextId(), agentId: seeded.agentId, subject, runs: [], openProposals: 0, shadow };\n this.threads.set(threadKey, thread);\n const createdAt = seeded.createdAt ?? this.now();\n const status = seeded.status ?? 'completed';\n const ended = !activeStatuses.includes(status);\n const endedAt = new Date(Date.parse(createdAt) + (seeded.durationSeconds ?? 30) * 1000).toISOString();\n const tokens = seeded.tokens ?? 0;\n const run: AgentRun = {\n id: seeded.id ?? this.nextId(),\n conversationId: thread.conversationId,\n triggerId: seeded.triggerId ?? 'manual',\n status,\n failureClass: status === 'failed' ? 'internal' : null,\n failureCode: status === 'failed' ? seeded.failureCode ?? 'assistant-turn-failed' : null,\n initiatorActorId: null,\n accountableOwnerId: `assistant-agent:${seeded.agentId}`,\n attempt: 1,\n agentVersion: 1,\n toolCalls: seeded.toolCalls ?? 0,\n inputTokens: Math.ceil(tokens / 2),\n outputTokens: Math.floor(tokens / 2),\n proposalCount: seeded.proposalCount ?? 0,\n summary: seeded.result ? seeded.result.slice(0, 600) : null,\n shadow,\n createdAt,\n startedAt: status === 'queued' ? null : createdAt,\n endedAt: ended ? endedAt : null,\n backgroundOperationId: null,\n kind: 'model'\n };\n thread.runs.push(run);\n thread.runs.sort((left, right) => Date.parse(left.createdAt) - Date.parse(right.createdAt));\n this.keep(run.id, seeded.result, seeded.results);\n if (seeded.mcpConnectionSkips?.length) {\n this.mcpSkips.set(run.id, seeded.mcpConnectionSkips.map(skip => ({ ...skip })));\n }\n }\n\n /**\n * Keeps a run's answer as the server bounds it: its first 20,000 characters, marked when cut, and its\n * answer per culture when its rules wrote one.\n */\n private keep(runId: string, answer: string | null | undefined, results?: Readonly<Record<string, string>>): void {\n this.results.set(runId, answer === undefined || answer === null ? null : answer.slice(0, maxResult));\n if (answer && answer.length > maxResult) {\n this.truncated.add(runId);\n }\n if (results && Object.keys(results).length > 0) {\n this.localizedResults.set(runId, Object.fromEntries(Object.entries(results).map(([culture, text]) => [culture, text.slice(0, maxResult)])));\n }\n }\n\n /**\n * The run's answer for a reader of `language`, as the server picks it: the answer per culture of the\n * exact culture or another of the same language when the rules wrote one, otherwise the answer.\n */\n private answerOf(runId: string, language: string | null): string | null {\n const localized = this.localizedResults.get(runId);\n const picked = localized ? mockPickText({ ...localized }, '', language) : null;\n return picked ?? this.results.get(runId) ?? null;\n }\n\n /** Neither stopped nor disabled in code; a paused agent, and one that is off, still works for people. */\n private isWorking(agent: AdminAgent): boolean {\n return agent.runState === 'active' || agent.runState === 'paused' || agent.runState === 'off';\n }\n\n private mayUse(agent: AdminAgent): boolean {\n return agent.requiredPolicy === null || agent.requiredPolicy === undefined || this.passes(agent.requiredPolicy);\n }\n\n /** The agent's view policy, by default its required policy, for its work on the whole application. */\n private passesViewPolicy(agent: AdminAgent): boolean {\n const policy = agent.viewPolicy ?? agent.requiredPolicy ?? null;\n return policy === null || this.passes(policy);\n }\n\n private passes(policy: string): boolean {\n return this.scenario.callerPolicies?.includes(policy) ?? true;\n }\n\n /** Agents in code keep their translation keys, agents created as data their text. */\n private nameKeyOf(agent: AdminAgent): string {\n return agent.source === 'code'\n ? this.scenario.agents.find(item => item.id === agent.id)?.displayNameKey ?? agent.displayName\n : agent.displayName;\n }\n\n private nextId(): string {\n this.sequence++;\n return `00000000-0000-4000-9000-${this.sequence.toString(16).padStart(12, '0')}`;\n }\n}\n\n/** An agent's work on one subject of the whole application for a board tile. */\nexport interface NhAssistantMockBoardWork {\n conversationId: string | null;\n latestRun: AgentLatestRun | null;\n openProposals: number;\n canStart: boolean;\n}\n\n/** The receipt of a start the server accepted. */\nfunction accepted(receipt: AgentTriggerReceipt): NhAssistantMockResult {\n return { status: 202, body: receipt };\n}\n\n/** Why the agent's state refuses a start: stopped, or disabled in the application's code. */\nfunction refusalOfState(agent: AdminAgent): string | null {\n switch (agent.runState) {\n case 'stopped':\n return 'assistant-agent-stopped';\n case 'configured-off':\n return 'assistant-agent-configured-off';\n default:\n return null;\n }\n}\n\n/** One thread per agent and subject, as on the server. */\nfunction key(agentId: string, subject: NhAssistantMockDescribedSubject): string {\n return `${agentId}|${subject.subjectType}|${subject.subjectId}`;\n}\n\nfunction validSubject(type: string, id: string): boolean {\n return dashCase.test(type) && type.length <= 100 && id.trim().length > 0 && id.length <= maxSubjectId && id.trim() === id;\n}\n\n/** The type the agent works on, and for the whole application its scope: app-wide or per division. */\nfunction worksOn(agent: AdminAgent, subject: NhAssistantMockDescribedSubject): boolean {\n if (!mockWorksOnCovers(agent, subject.subjectType)) {\n return false;\n }\n if (subject.scope === 'object') {\n return true;\n }\n return agent.perDivision === true ? subject.scope === 'division' : subject.scope === 'global';\n}\n\nfunction latestRun(thread: StoredThread, answerOf: (runId: string) => string | null): AgentLatestRun | null {\n const run = thread.runs.at(-1);\n if (!run) {\n return null;\n }\n // The stored answer first, in the reader's language as the server reads it; without one, the\n // summary the run ended with.\n const result = answerOf(run.id) ?? run.summary;\n return {\n runId: run.id,\n conversationId: run.conversationId,\n triggerId: run.triggerId,\n status: run.status,\n failureCode: run.failureCode,\n at: run.endedAt ?? run.startedAt ?? run.createdAt,\n result: result === null ? null : result.slice(0, resultPreview),\n resultTruncated: result !== null && result.length > resultPreview,\n shadow: run.shadow\n };\n}\n\nfunction toThread(thread: StoredThread): AgentThread {\n const active = thread.runs.find(run => activeStatuses.includes(run.status)) ?? null;\n return {\n conversationId: thread.conversationId,\n agentId: thread.agentId,\n subjectType: thread.subject.subjectType,\n subjectId: thread.subject.subjectId,\n subjectDisplayName: thread.subject.displayName,\n accountability: 'agent',\n accountableOwnerId: `assistant-agent:${thread.agentId}`,\n role: thread.subject.role,\n activeRun: active,\n waitingInputs: 0,\n shadow: false,\n subjectTypeName: thread.subject.typeName,\n subjectLink: thread.subject.link\n };\n}\n\n/**\n * Reads a run history's filter and page as the server does: the filter, or the refused parts as field\n * errors (`page`, `itemsPerPage`, `agentId`, `subjectType`, `subjectId`, `status`, `from`, `to`).\n * People's history takes an agent; the administration's runs view names its agent in the path.\n */\nfunction readFilter(query: URLSearchParams, withAgent: boolean): { filter: RunFilter } | { errors: Record<string, string[]> } {\n const errors: Record<string, string[]> = {};\n const page = query.has('page') ? Number(query.get('page')) : 1;\n if (!Number.isInteger(page) || page < 1) {\n errors['page'] = ['invalid'];\n }\n const itemsPerPage = query.has('itemsPerPage') ? Number(query.get('itemsPerPage')) : 20;\n if (!Number.isInteger(itemsPerPage) || itemsPerPage < 1 || itemsPerPage > maxItemsPerPage) {\n errors['itemsPerPage'] = ['invalid'];\n }\n const agentId = withAgent ? query.get('agentId') : null;\n if (agentId !== null && (agentId.trim().length === 0 || agentId.length > maxAgentId)) {\n errors['agentId'] = ['invalid'];\n }\n const subjectType = query.get('subjectType');\n if (subjectType !== null && (!dashCase.test(subjectType) || subjectType.length > 100)) {\n errors['subjectType'] = ['invalid'];\n }\n const subjectId = query.get('subjectId');\n if (subjectId !== null) {\n if (subjectType === null) {\n errors['subjectType'] = ['required'];\n }\n if (subjectId.trim().length === 0 || subjectId.length > maxSubjectId || subjectId.trim() !== subjectId) {\n errors['subjectId'] = ['invalid'];\n }\n }\n const status = query.get('status');\n if (status !== null && !runStatuses.includes(status as AgentRunStatus)) {\n errors['status'] = ['invalid'];\n }\n const from = query.has('from') ? Date.parse(query.get('from')!) : null;\n const to = query.has('to') ? Date.parse(query.get('to')!) : null;\n if (from !== null && Number.isNaN(from)) {\n errors['from'] = ['invalid'];\n }\n if ((to !== null && Number.isNaN(to)) || (from !== null && to !== null && !Number.isNaN(from) && to <= from)) {\n errors['to'] = ['invalid'];\n }\n\n if (Object.keys(errors).length > 0) {\n return { errors };\n }\n return { filter: { agentId, subjectType, subjectId, status, from, to, page, itemsPerPage } };\n}\n","import {\n AdminAgent,\n AdminAgentGroups,\n AgentBoard,\n AgentBoardAgent,\n AgentBoardList,\n AgentBoardVisit,\n AgentGroup,\n AgentSubjectType\n} from '@newheap/platform-ai-chat';\nimport { NhAssistantMockAgentGroup, NhAssistantMockScenario } from './nh-assistant-mock.models';\nimport { NhAssistantMockResult, mockFailure as failure } from './nh-assistant-mock-admin-shared';\nimport { NhAssistantMockAgentRuns } from './nh-assistant-mock-agent-runs';\nimport { NhAssistantMockDescribedSubject, NhAssistantMockSubjects, mockPickText } from './nh-assistant-mock-subjects';\nimport { mockSystemSubjectType } from './nh-assistant-mock-works-on';\n\n/** What the boards read of the mock's agents and caller. */\nexport interface NhAssistantMockBoardContext {\n /** Every agent of the administration. */\n agents(): AdminAgent[];\n /** Whether the caller passes the administration policy. */\n administers(): boolean;\n}\n\nconst dashCase = /^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/;\nconst language = /^[A-Za-z]{2,8}(-[A-Za-z0-9]{1,8})*$/;\nconst maxGroupId = 64;\nconst maxGroups = 100;\nconst maxName = 100;\nconst maxDescription = 300;\nconst guid = /^[0-9a-f]{8}-?[0-9a-f]{4}-?[0-9a-f]{4}-?[0-9a-f]{4}-?[0-9a-f]{12}$/i;\n\n/**\n * Groups and boards of the mock API (K15, K16), as the server serves them: the scenario's\n * `agentGroups` are the groups in code with their names per language, checked as the server checks\n * the registration at startup; administrators put agents in groups and out of them with\n * `PUT admin/agents/{id}/groups`, which wins over the scenario's code memberships; `GET boards`,\n * `GET boards/{group}` and `POST boards/{group}/visit` show people the agents they may see (an agent\n * that works on the whole application by its view policy, by default its required policy, another by\n * its required policy), with their latest result and what is new since the visit of the board in its\n * scope. Visits live as long as the mock.\n */\nexport class NhAssistantMockBoards {\n private readonly groups: readonly NhAssistantMockAgentGroup[];\n /** The administrators' choices per agent: group id to in or out. */\n private readonly choices = new Map<string, Map<string, boolean>>();\n /** When the caller last visited a board, by `group|scope`. */\n private readonly visits = new Map<string, string>();\n\n constructor(\n scenario: NhAssistantMockScenario,\n private readonly subjects: NhAssistantMockSubjects,\n private readonly agentRuns: NhAssistantMockAgentRuns,\n private readonly context: NhAssistantMockBoardContext,\n private readonly now: () => string\n ) {\n this.groups = [...(scenario.agentGroups ?? [])].sort((left, right) => left.id.localeCompare(right.id));\n validate(this.groups);\n // An agent created as data that the scenario lists in a group was put there by an administrator.\n for (const group of this.groups) {\n for (const agentId of group.agentIds ?? []) {\n if (this.context.agents().find(agent => agent.id === agentId)?.source === 'admin') {\n const choices = this.choices.get(agentId) ?? new Map<string, boolean>();\n choices.set(group.id, true);\n this.choices.set(agentId, choices);\n }\n }\n }\n }\n\n /** The run catalog's groups in the request's language, by id. */\n catalog(requested: string | null): AgentGroup[] {\n return this.groups.map(group => ({\n id: group.id,\n name: mockPickText(group.names, group.fallbackLanguage ?? 'en', requested) ?? group.id,\n description: mockPickText(group.descriptions, group.fallbackLanguage ?? 'en', requested)\n }));\n }\n\n /** The groups an agent is in now and those it joins in code. */\n membership(agentId: string): AdminAgentGroups {\n const codeGroups = this.codeGroupsOf(agentId);\n const groups = new Set(codeGroups);\n for (const [groupId, member] of this.choices.get(agentId) ?? []) {\n if (member) {\n groups.add(groupId);\n } else {\n groups.delete(groupId);\n }\n }\n return { agentId, groups: [...groups].sort(), codeGroups };\n }\n\n /** Forgets the choices about an agent that was deleted. */\n forget(agentId: string): void {\n this.choices.delete(agentId);\n }\n\n /** `PUT admin/agents/{id}/groups`, with the server's validation. */\n handleAdminGroups(method: string, agentId: string, body: unknown): NhAssistantMockResult {\n if (method !== 'PUT') {\n return { status: 405 };\n }\n if (!this.context.administers()) {\n return failure('assistant-forbidden');\n }\n const request = body as { groups?: unknown } | undefined;\n if (!request || typeof request !== 'object') {\n return failure('assistant-validation');\n }\n if (!Array.isArray(request.groups)) {\n return failure('assistant-validation', { groups: ['required'] });\n }\n const wanted = request.groups as unknown[];\n if (wanted.length > maxGroups) {\n return failure('assistant-validation', { groups: ['too-long'] });\n }\n if (!wanted.every(groupId => typeof groupId === 'string' && this.groups.some(group => group.id === groupId))) {\n return failure('assistant-validation', { groups: ['not-found'] });\n }\n const agent = this.context.agents().find(item => item.id === agentId);\n if (!agent) {\n return failure('assistant-agent-not-found');\n }\n if (wanted.length > 0 && agent.shadowOf) {\n return failure('assistant-shadow-variant');\n }\n\n // Only a choice that differs from code is kept; one that equals code lets code decide again.\n const codeGroups = this.codeGroupsOf(agentId);\n const choices = new Map<string, boolean>();\n for (const group of this.groups) {\n const member = wanted.includes(group.id);\n if (member !== codeGroups.includes(group.id)) {\n choices.set(group.id, member);\n }\n }\n this.choices.set(agentId, choices);\n return { status: 200, body: this.membership(agentId) };\n }\n\n /** `GET boards`, `GET boards/{group}` and `POST boards/{group}/visit`; `null` for other paths. */\n handle(method: string, segments: string[], query: URLSearchParams, requested: string | null): NhAssistantMockResult | null {\n if (segments[0] !== 'boards' || segments.length > 3 || (segments.length === 3 && segments[2] !== 'visit')) {\n return null;\n }\n if (segments.length === 1) {\n if (method !== 'GET') {\n return { status: 405 };\n }\n const items = this.groups\n .map(group => ({ group, count: this.visibleAgents(group.id, null, requested).length }))\n .filter(item => item.count > 0)\n .map(item => {\n const named = this.catalog(requested).find(group => group.id === item.group.id)!;\n return { id: named.id, name: named.name, description: named.description, agentCount: item.count };\n })\n .sort((left, right) => left.name.localeCompare(right.name) || left.id.localeCompare(right.id));\n const body: AgentBoardList = { items };\n return { status: 200, body };\n }\n\n const visit = segments.length === 3;\n if (method !== (visit ? 'POST' : 'GET')) {\n return { status: 405 };\n }\n const groupId = segments[1];\n const divisionId = query.get('divisionId');\n if (divisionId !== null && divisionId !== '' && !guid.test(divisionId)) {\n return failure('assistant-board-scope-invalid');\n }\n const division = divisionId ? this.division(divisionId, requested) : null;\n if (!this.groups.some(group => group.id === groupId) || division === undefined) {\n return failure('assistant-board-not-found');\n }\n const agents = this.visibleAgents(groupId, division, requested);\n if (agents.length === 0) {\n return failure('assistant-board-not-found');\n }\n\n const scopeKey = division ? `division:${guidN(divisionId!)}` : 'global';\n const visitKey = `${groupId}|${scopeKey}`;\n if (visit) {\n const visitedAt = this.now();\n this.visits.set(visitKey, visitedAt);\n const body: AgentBoardVisit = { groupId, scopeKey, visitedAt };\n return { status: 200, body };\n }\n\n const lastVisitedAt = this.visits.get(visitKey) ?? null;\n const named = this.catalog(requested).find(group => group.id === groupId)!;\n const types = this.subjects.catalog(requested);\n const body: AgentBoard = {\n id: groupId,\n name: named.name,\n description: named.description,\n scopeKey,\n divisionId: division ? divisionId!.toLowerCase() : null,\n lastVisitedAt,\n agents: agents.map(agent => this.tile(agent, division, types, lastVisitedAt, requested))\n };\n return { status: 200, body };\n }\n\n /** The tile of one agent on a board. */\n private tile(\n agent: AdminAgent,\n division: NhAssistantMockDescribedSubject | null,\n types: readonly AgentSubjectType[],\n lastVisitedAt: string | null,\n requested: string | null\n ): AgentBoardAgent {\n const subject = this.subjectOf(agent, division, requested);\n const work = subject ? this.agentRuns.boardWork(agent, subject, requested) : null;\n const ended = work?.latestRun && work.latestRun.status !== 'queued' && work.latestRun.status !== 'running'\n ? Date.parse(work.latestRun.at)\n : null;\n const visited = lastVisitedAt === null ? null : Date.parse(lastVisitedAt);\n const isNew = visited === null\n ? ended !== null || (work?.openProposals ?? 0) > 0\n : ended !== null && ended > visited;\n return {\n agentId: agent.id,\n ...this.agentRuns.nameOf(agent),\n worksOn: {\n allObjects: agent.worksOnAllSubjects ?? true,\n application: agent.worksOnApplication === true,\n perDivision: agent.perDivision === true,\n subjectTypes: [...(agent.worksOnSubjectTypes ?? [])].sort().map(id => {\n const type = types.find(item => item.id === id);\n return { id, name: type?.name ?? id, pluralName: type?.pluralName ?? null };\n })\n },\n subjectType: subject?.subjectType ?? null,\n subjectId: subject?.subjectId ?? null,\n subjectDisplayName: subject?.displayName ?? null,\n canStart: work?.canStart ?? false,\n conversationId: work?.conversationId ?? null,\n latestRun: work?.latestRun ?? null,\n openProposals: work?.openProposals ?? 0,\n isNew\n };\n }\n\n /**\n * The group's agents the caller sees on its board in the scope, by id: working live agents, by their\n * view policy where they work on the whole application in the scope, otherwise by their required\n * policy.\n */\n private visibleAgents(groupId: string, division: NhAssistantMockDescribedSubject | null, requested: string | null): AdminAgent[] {\n return this.context.agents()\n .filter(agent => !agent.shadowOf && this.membership(agent.id).groups.includes(groupId))\n .filter(agent => this.subjectOf(agent, division, requested)\n ? this.agentRuns.maySeeResults(agent)\n : this.agentRuns.mayUseNow(agent))\n .sort((left, right) => left.id.localeCompare(right.id));\n }\n\n /** The whole application an agent works on in the board's scope, as the server decides it. */\n private subjectOf(agent: AdminAgent, division: NhAssistantMockDescribedSubject | null, requested: string | null): NhAssistantMockDescribedSubject | null {\n if (agent.worksOnApplication !== true) {\n return null;\n }\n if (agent.perDivision !== true) {\n return this.subjects.describe(mockSystemSubjectType, 'global', requested, this.context.administers()) ?? null;\n }\n return division;\n }\n\n /** A listed division the caller works in; `undefined` for one the board may not show. */\n private division(divisionId: string, requested: string | null): NhAssistantMockDescribedSubject | undefined {\n return this.subjects.describe(mockSystemSubjectType, `division-${guidN(divisionId)}`, requested, this.context.administers()) ?? undefined;\n }\n\n /** The groups an agent in code joins in code; an agent created as data joins none there. */\n private codeGroupsOf(agentId: string): string[] {\n if (this.context.agents().find(agent => agent.id === agentId)?.source !== 'code') {\n return [];\n }\n return this.groups.filter(group => group.agentIds?.includes(agentId)).map(group => group.id);\n }\n}\n\nfunction guidN(id: string): string {\n return id.replace(/-/g, '').toLowerCase();\n}\n\n/** Fails as the server fails at startup for groups it would not register. */\nfunction validate(groups: readonly NhAssistantMockAgentGroup[]): void {\n if (groups.length > maxGroups) {\n throw new Error(`The mock scenario registers more than ${maxGroups} agent groups.`);\n }\n const seen = new Set<string>();\n for (const group of groups) {\n if (!dashCase.test(group.id) || group.id.length > maxGroupId) {\n throw new Error(`The mock agent group '${group.id}' is not a dash-case id of at most ${maxGroupId} characters.`);\n }\n if (seen.has(group.id)) {\n throw new Error(`The mock agent group '${group.id}' is registered twice.`);\n }\n seen.add(group.id);\n const fallback = group.fallbackLanguage ?? 'en';\n checkTexts(group.id, 'name', group.names, fallback, maxName);\n if (group.descriptions) {\n checkTexts(group.id, 'description', group.descriptions, fallback, maxDescription);\n }\n }\n}\n\nfunction checkTexts(groupId: string, kind: string, texts: Record<string, string> | undefined, fallback: string, max: number): void {\n const entries = Object.entries(texts ?? {});\n if (entries.length === 0 || !entries.some(([key]) => key.toLowerCase() === fallback.toLowerCase())) {\n throw new Error(`The mock agent group '${groupId}' has no ${kind} in its fallback language '${fallback}'.`);\n }\n for (const [key, text] of entries) {\n if (!language.test(key) || text.trim().length === 0 || text.trim().length > max) {\n throw new Error(`The ${kind} of mock agent group '${groupId}' in '${key}' must be 1 to ${max} characters.`);\n }\n }\n}\n","import {\n AgentDecisionOutcome,\n AgentInbox,\n AgentInboxGroup,\n AgentInboxVisit,\n AgentProposal,\n AgentProposalLookup,\n AgentSubjectWorkProposal,\n NH_ASSISTANT_MAX_PROPOSAL_LOOKUP,\n NhAssistantConsultationRoute\n} from '@newheap/platform-ai-chat';\nimport { NhAssistantMockResult, mockFailure as failure } from './nh-assistant-mock-admin-shared';\nimport { NhAssistantMockProposal } from './nh-assistant-mock.models';\n\ninterface StoredProposal {\n proposal: AgentProposal;\n canDecide: boolean;\n reasonCode: string | null;\n divisionId: string | null;\n}\n\nconst dashCase = /^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/;\nconst maxReason = 500;\nconst maxItemsPerPage = 100;\nconst maxBulkDecisions = 50;\nconst guid = /^[0-9a-f]{8}-?[0-9a-f]{4}-?[0-9a-f]{4}-?[0-9a-f]{4}-?[0-9a-f]{12}$/i;\nconst lifetimeMs = 3 * 24 * 60 * 60 * 1000;\n/** The platform's subject type of the whole application. */\nconst systemType = 'nh-system';\n/** The person who asked decides a consultation's proposal in their own chat; nobody decides it in the thread. */\nconst askerDecidesCode = 'assistant-consult-asker-decides';\n/** Someone other than the person who started the work decides it. */\nconst fourEyesCode = 'assistant-four-eyes-required';\n\n/**\n * The proposals the scenario lists, which the mock's agents left, for example one a run for the whole\n * application placed at a project (`placedBy`). The mock runs no agents: it serves them as the server\n * does in the approval inbox (`GET approvals/inbox`, pending proposals the caller may decide), one by id\n * (`GET approvals/{id}`), several by id (`POST approvals/lookup`), in their thread\n * (`GET threads/{id}/proposals`) and on their subject's work, and decides them one by one or together\n * with the server's validation and statuses. An approved proposal executes at once. A proposal of the\n * whole application (`nh-system`) exists only for the approvers of the whole application who pass the\n * agent's view policy (`mayDecideApplication`): for anybody else the inbox leaves it out, reading it\n * answers `404` and deciding it `404 assistant-approval-not-found`. A consultation's proposal that the\n * person who asked decides in their own chat (`asker-decides`) waits inline and is refused here with\n * `assistant-consult-asker-decides`; one that runs with the agent's own rights refuses its asker with\n * `assistant-four-eyes-required`.\n */\nexport class NhAssistantMockProposals {\n private readonly proposals = new Map<string, StoredProposal>();\n /** When the caller last looked at the inbox, by scope key. */\n private readonly visits = new Map<string, string>();\n\n constructor(\n scenario: readonly NhAssistantMockProposal[] = [],\n private readonly actorId: () => string,\n private readonly now: () => string,\n private readonly mayDecideApplication: (agentId: string) => boolean = () => true,\n private readonly decided: (proposal: AgentProposal) => void = () => undefined,\n private readonly mayWorkIn: (divisionId: string) => boolean = () => true\n ) {\n const created = new Date(now()).getTime();\n for (const item of scenario) {\n if (this.proposals.has(item.approvalId)) {\n throw new Error(`Mock proposal '${item.approvalId}' is listed twice.`);\n }\n if (!dashCase.test(item.subjectType)) {\n throw new Error(`Mock proposal '${item.approvalId}' names subject type '${item.subjectType}', which is not dash-case.`);\n }\n if (item.consultationRoute && !item.consultationId) {\n throw new Error(`Mock proposal '${item.approvalId}' names a consultation route without its consultation.`);\n }\n const route = item.consultationRoute ?? null;\n const refusal = consultationRefusal(route, item.initiatorActorId ?? null, actorId());\n const canDecide = item.canDecide ?? refusal === null;\n this.proposals.set(item.approvalId, {\n proposal: {\n approvalId: item.approvalId,\n proposalId: `${item.approvalId}-proposal`,\n proposalHash: `sha256:${item.approvalId}`,\n conversationId: item.conversationId ?? `${item.approvalId}-thread`,\n runId: item.runId ?? null,\n agentId: item.agentId,\n subjectType: item.subjectType,\n subjectId: item.subjectId,\n subjectDisplayName: item.subjectDisplayName ?? null,\n subjectTypeName: item.subjectTypeName ?? null,\n subjectLink: item.subjectLink ?? null,\n toolId: item.toolId,\n summary: 'Approval is required before this tool can run.',\n presentation: item.presentation ?? null,\n argumentsPreview: '{}',\n targets: [],\n status: item.status ?? 'pending',\n mode: route === 'asker-decides' ? 'inline' : 'deferred',\n policyId: null,\n grantSource: item.grantSource ?? (route === 'subject-asker-rights' ? 'delegated' : 'agent'),\n createdAt: item.createdAt ?? new Date(created).toISOString(),\n expiresAt: item.expiresAt ?? new Date(Date.parse(item.createdAt ?? new Date(created).toISOString()) + lifetimeMs).toISOString(),\n initiatorActorId: item.initiatorActorId ?? null,\n decidedByActorId: null,\n decidedAt: null,\n executionResultCode: null,\n executedAt: null,\n rationale: item.rationale ?? null,\n placedBy: item.placedBy ?? null,\n parent: item.parent ?? null,\n canGiveFeedback: false,\n consultationId: item.consultationId ?? null,\n consultationRoute: route\n },\n divisionId: item.divisionId ?? null,\n canDecide,\n reasonCode: canDecide ? null : item.reasonCode ?? refusal ?? 'assistant-approval-policy-denied'\n });\n }\n }\n\n /** `GET`/`POST approvals/…`; `null` for paths the mock does not serve. */\n handle(method: string, segments: string[], query: URLSearchParams, body: unknown): NhAssistantMockResult | null {\n if (segments.length === 2 && segments[1] === 'inbox') {\n return method === 'GET' ? this.inbox(query) : { status: 405 };\n }\n if (segments.length === 3 && segments[1] === 'inbox' && segments[2] === 'visit') {\n return method === 'POST' ? this.visit(query) : { status: 405 };\n }\n if (segments.length === 2 && segments[1] === 'lookup') {\n return method === 'POST' ? this.lookup(body) : { status: 405 };\n }\n if (segments.length === 2 && segments[1] === 'decisions') {\n return method === 'POST' ? this.decideMany(body) : { status: 405 };\n }\n if (segments.length === 2) {\n return method === 'GET' ? this.read(segments[1]) : { status: 405 };\n }\n if (segments.length === 3 && segments[2] === 'decisions') {\n return method === 'POST' ? this.decideOne(segments[1], body) : { status: 405 };\n }\n return null;\n }\n\n /** The proposals waiting in a thread, newest first; `null` when the scenario lists none there. */\n ofThread(conversationId: string): AgentProposal[] | null {\n const items = this.visible()\n .filter(item => item.proposal.conversationId === conversationId)\n .map(item => item.proposal)\n .reverse();\n return items.length === 0 ? null : items;\n }\n\n /** The proposals a consultation left per route; routes without proposals are left out. */\n consultationCounts(consultationId: string): { total: number; byRoute: Partial<Record<NhAssistantConsultationRoute, number>> } {\n const byRoute: Partial<Record<NhAssistantConsultationRoute, number>> = {};\n let total = 0;\n for (const { proposal } of this.proposals.values()) {\n if (proposal.consultationId !== consultationId) {\n continue;\n }\n total++;\n if (proposal.consultationRoute) {\n byRoute[proposal.consultationRoute] = (byRoute[proposal.consultationRoute] ?? 0) + 1;\n }\n }\n return { total, byRoute };\n }\n\n /** The proposals of a run the caller may see, in the order the scenario lists them. */\n ofRun(runId: string): AgentProposal[] {\n return this.visible()\n .filter(item => item.proposal.runId === runId)\n .map(item => item.proposal);\n }\n\n /** The pending proposals on a subject with the caller's right to decide each, earliest expiry first. */\n openOfSubject(subjectType: string, subjectId: string): AgentSubjectWorkProposal[] {\n return this.visible()\n .filter(item => item.proposal.subjectType === subjectType && item.proposal.subjectId === subjectId && item.proposal.status === 'pending')\n .map(item => this.withRight(item));\n }\n\n /** The proposals the caller may see: those of the whole application only for its approvers. */\n private visible(): StoredProposal[] {\n return [...this.proposals.values()].filter(item => this.isVisible(item));\n }\n\n private isVisible(item: StoredProposal): boolean {\n return item.proposal.subjectType !== systemType || this.mayDecideApplication(item.proposal.agentId);\n }\n\n /** A proposal by id that the caller may see. */\n private find(approvalId: string): StoredProposal | undefined {\n const stored = this.proposals.get(approvalId);\n return stored && this.isVisible(stored) ? stored : undefined;\n }\n\n private inbox(query: URLSearchParams): NhAssistantMockResult {\n const page = Number(query.get('page') ?? '1');\n const itemsPerPage = Number(query.get('itemsPerPage') ?? '20');\n const subjectType = query.get('subjectType');\n if (!Number.isInteger(page) || page < 1\n || !Number.isInteger(itemsPerPage) || itemsPerPage < 1 || itemsPerPage > maxItemsPerPage\n || (subjectType !== null && !dashCase.test(subjectType))) {\n return failure('assistant-message-invalid');\n }\n\n const agentId = query.get('agentId');\n const runId = query.get('runId');\n const divisionId = query.get('divisionId');\n if (divisionId !== null && !guid.test(divisionId)) {\n return { status: 400 };\n }\n\n const grouped = query.get('grouped') === 'true';\n const items = this.visible()\n .filter(item => item.proposal.status === 'pending' && item.canDecide)\n .filter(item => divisionId === null || sameGuid(item.divisionId, divisionId))\n .map(item => item.proposal)\n .filter(proposal => (subjectType === null || proposal.subjectType === subjectType)\n && (agentId === null || proposal.agentId === agentId)\n && (runId === null || proposal.runId === runId))\n .sort((left, right) => left.expiresAt.localeCompare(right.expiresAt) || left.approvalId.localeCompare(right.approvalId));\n const ordered = grouped ? groupedOrder(items) : items;\n const offset = (page - 1) * itemsPerPage;\n const pageItems = ordered.slice(offset, offset + itemsPerPage);\n const scopeKey = scopeKeyOf(divisionId);\n const lastVisitedAt = this.visits.get(scopeKey) ?? null;\n const body: AgentInbox = {\n items: pageItems,\n total: items.length,\n scopeKey,\n lastVisitedAt,\n newApprovalIds: pageItems\n .filter(proposal => lastVisitedAt === null || Date.parse(proposal.createdAt) > Date.parse(lastVisitedAt))\n .map(proposal => proposal.approvalId),\n groups: grouped ? groupsOf(ordered, offset, pageItems.length) : null\n };\n return { status: 200, body };\n }\n\n /** `POST approvals/inbox/visit`: the whole inbox, or that of a division the caller works in. */\n private visit(query: URLSearchParams): NhAssistantMockResult {\n const divisionId = query.get('divisionId');\n if (divisionId !== null && !guid.test(divisionId)) {\n return { status: 400 };\n }\n if (divisionId !== null && !this.mayWorkIn(divisionId)) {\n return failure('assistant-subject-not-found');\n }\n\n const body: AgentInboxVisit = { scopeKey: scopeKeyOf(divisionId), visitedAt: this.now() };\n this.visits.set(body.scopeKey, body.visitedAt);\n return { status: 200, body };\n }\n\n private read(approvalId: string): NhAssistantMockResult {\n const stored = this.find(approvalId);\n return stored ? { status: 200, body: this.withRight(stored) } : failure('assistant-approval-not-found');\n }\n\n private lookup(body: unknown): NhAssistantMockResult {\n const ids = (body as { approvalIds?: unknown } | undefined)?.approvalIds;\n if (!Array.isArray(ids) || ids.length === 0 || ids.some(id => typeof id !== 'string')) {\n return failure('assistant-message-invalid');\n }\n const distinct = [...new Set(ids as string[])];\n if (distinct.length > NH_ASSISTANT_MAX_PROPOSAL_LOOKUP) {\n return failure('assistant-message-invalid');\n }\n\n const response: AgentProposalLookup = {\n items: distinct\n .map(id => this.find(id))\n .filter((item): item is StoredProposal => item !== undefined)\n .map(item => this.withRight(item))\n };\n return { status: 200, body: response };\n }\n\n private decideOne(approvalId: string, body: unknown): NhAssistantMockResult {\n const request = body as { decision?: unknown; expectedProposalHash?: unknown; reason?: unknown } | undefined;\n if (!validDecision(request)) {\n return failure('assistant-approval-decision-invalid');\n }\n\n const outcome = this.decide(approvalId, request!.decision === 'approve', request!.expectedProposalHash);\n return outcome.code === null\n ? { status: 200, body: this.proposals.get(approvalId)!.proposal }\n : failure(outcome.code);\n }\n\n private decideMany(body: unknown): NhAssistantMockResult {\n const request = body as { approvalIds?: unknown; decision?: unknown; reason?: unknown } | undefined;\n const ids = request?.approvalIds;\n if (!validDecision(request)\n || !Array.isArray(ids)\n || ids.length === 0\n || ids.length > maxBulkDecisions\n || ids.some(id => typeof id !== 'string')) {\n return failure('assistant-approval-decision-invalid');\n }\n\n const results: AgentDecisionOutcome[] = [...new Set(ids as string[])].map(id => {\n const outcome = this.decide(id, request!.decision === 'approve', null);\n return {\n approvalId: id,\n succeeded: outcome.code === null,\n code: outcome.code,\n status: outcome.code === null ? this.proposals.get(id)!.proposal.status : null\n };\n });\n return { status: 200, body: { results } };\n }\n\n /** Decides one proposal as the server does; an approved proposal executes at once. */\n private decide(approvalId: string, approve: boolean, expectedHash: unknown): { code: string | null } {\n const stored = this.find(approvalId);\n if (!stored) {\n return { code: 'assistant-approval-not-found' };\n }\n if (typeof expectedHash === 'string' && expectedHash !== stored.proposal.proposalHash) {\n return { code: 'assistant-proposal-hash-mismatch' };\n }\n if (stored.proposal.status !== 'pending') {\n return { code: 'assistant-approval-not-pending' };\n }\n if (!stored.canDecide) {\n return { code: stored.reasonCode ?? 'assistant-approval-policy-denied' };\n }\n\n const now = this.now();\n stored.proposal = {\n ...stored.proposal,\n status: approve ? 'executed' : 'rejected',\n decidedByActorId: this.actorId(),\n decidedAt: now,\n executedAt: approve ? now : null\n };\n this.decided(stored.proposal);\n return { code: null };\n }\n\n private withRight(item: StoredProposal): AgentSubjectWorkProposal {\n const pending = item.proposal.status === 'pending';\n return {\n proposal: item.proposal,\n canDecide: pending && item.canDecide,\n reasonCode: pending && !item.canDecide ? item.reasonCode : null\n };\n }\n}\n\n/**\n * Why nobody, or not the caller, decides a consultation's proposal here: the person who asked decides\n * an `asker-decides` proposal in their own chat, and four-eyes keeps the asker out of a proposal that\n * runs with the agent's own rights; `null` when the route does not keep the caller out.\n */\nfunction consultationRefusal(route: NhAssistantConsultationRoute | null, initiatorActorId: string | null, actorId: string): string | null {\n if (route === 'asker-decides') {\n return askerDecidesCode;\n }\n return route === 'subject-agent-rights' && initiatorActorId === actorId ? fourEyesCode : null;\n}\n\n/** The scope of the inbox's visits: `global`, or the scope key of a division. */\nfunction scopeKeyOf(divisionId: string | null): string {\n return divisionId === null ? 'global' : `division:${divisionId.replaceAll('-', '').toLowerCase()}`;\n}\n\nfunction sameGuid(left: string | null, right: string): boolean {\n return left !== null && left.replaceAll('-', '').toLowerCase() === right.replaceAll('-', '').toLowerCase();\n}\n\n/** The group a proposal belongs to: its parent, or its own subject without one. */\nfunction groupKeyOf(proposal: AgentProposal): string {\n return proposal.parent\n ? `${proposal.parent.subjectType}|${proposal.parent.subjectId}`\n : `${proposal.subjectType}|${proposal.subjectId}`;\n}\n\nfunction subjectKeyOf(proposal: AgentProposal): string {\n return `${groupKeyOf(proposal)}|${proposal.subjectType}|${proposal.subjectId}`;\n}\n\nfunction firstExpiries(items: readonly AgentProposal[], key: (proposal: AgentProposal) => string): Map<string, string> {\n const first = new Map<string, string>();\n for (const proposal of items) {\n const current = first.get(key(proposal));\n if (current === undefined || proposal.expiresAt < current) {\n first.set(key(proposal), proposal.expiresAt);\n }\n }\n return first;\n}\n\n/**\n * The order of the grouped inbox, as the server sorts: groups by their first expiry, a group's own\n * subject first, then its other subjects by their first expiry, one run's proposals together, then by\n * expiry.\n */\nfunction groupedOrder(items: readonly AgentProposal[]): AgentProposal[] {\n const groups = firstExpiries(items, groupKeyOf);\n const subjects = firstExpiries(items, subjectKeyOf);\n const compare = (left: string, right: string) => (left < right ? -1 : left > right ? 1 : 0);\n return [...items].sort((left, right) =>\n compare(groups.get(groupKeyOf(left))!, groups.get(groupKeyOf(right))!)\n || compare(groupKeyOf(left), groupKeyOf(right))\n || (left.parent ? 1 : 0) - (right.parent ? 1 : 0)\n || compare(subjects.get(subjectKeyOf(left))!, subjects.get(subjectKeyOf(right))!)\n || compare(subjectKeyOf(left), subjectKeyOf(right))\n || (left.runId === null ? 1 : 0) - (right.runId === null ? 1 : 0)\n || compare(left.runId ?? '', right.runId ?? '')\n || compare(left.expiresAt, right.expiresAt)\n || compare(left.approvalId, right.approvalId));\n}\n\n/** The groups of the page `ordered[offset, offset + count)`, with their totals and continuation. */\nfunction groupsOf(ordered: readonly AgentProposal[], offset: number, count: number): AgentInboxGroup[] {\n const page = ordered.slice(offset, offset + count);\n const previous = offset > 0 ? ordered[offset - 1] : undefined;\n const next = ordered[offset + count];\n const groups: AgentInboxGroup[] = [];\n for (let index = 0; index < page.length;) {\n const key = groupKeyOf(page[index]);\n let end = index;\n while (end < page.length && groupKeyOf(page[end]) === key) {\n end++;\n }\n\n const members = page.slice(index, end);\n const own = members.find(proposal => !proposal.parent);\n const parent = members.find(proposal => proposal.parent)?.parent ?? null;\n const subjects: AgentInboxGroup['subjects'] = [];\n for (let at = 0; at < members.length;) {\n const subjectKey = subjectKeyOf(members[at]);\n let stop = at;\n while (stop < members.length && subjectKeyOf(members[stop]) === subjectKey) {\n stop++;\n }\n subjects.push({\n subjectType: members[at].subjectType,\n subjectId: members[at].subjectId,\n count: stop - at,\n total: ordered.filter(proposal => subjectKeyOf(proposal) === subjectKey).length,\n continuesFromPreviousPage: index === 0 && at === 0 && previous !== undefined && subjectKeyOf(previous) === subjectKey,\n continuesOnNextPage: end === page.length && stop === members.length && next !== undefined && subjectKeyOf(next) === subjectKey\n });\n at = stop;\n }\n\n groups.push({\n subjectType: own?.subjectType ?? parent!.subjectType,\n subjectId: own?.subjectId ?? parent!.subjectId,\n displayName: own ? own.subjectDisplayName : parent!.displayName,\n subjectTypeName: own ? own.subjectTypeName ?? null : parent!.subjectTypeName ?? null,\n subjectLink: own ? own.subjectLink ?? null : parent!.subjectLink ?? null,\n count: members.length,\n total: ordered.filter(proposal => groupKeyOf(proposal) === key).length,\n continuesFromPreviousPage: index === 0 && previous !== undefined && groupKeyOf(previous) === key,\n continuesOnNextPage: end === page.length && next !== undefined && groupKeyOf(next) === key,\n subjects\n });\n index = end;\n }\n return groups;\n}\n\nfunction validDecision(request: { decision?: unknown; reason?: unknown } | undefined): boolean {\n return !!request\n && (request.decision === 'approve' || request.decision === 'reject')\n && (request.reason === undefined || request.reason === null || (typeof request.reason === 'string' && request.reason.length <= maxReason));\n}\n","import {\n McpAuthorizationStart,\n NhAssistantMcpAuthorizationHandle,\n NhAssistantMcpAuthorizationOutcome,\n NhAssistantMcpAuthorizationWindow\n} from '@newheap/platform-ai-chat';\nimport { Observable } from 'rxjs';\n\n/**\n * The authorization window of the mock API: instead of a popup at an authorization server it plays\n * the callback of the started flow right away, as the scenario's `admin.mcpAuthorization` says. It\n * records the authorization URLs it was asked to show.\n */\nexport class NhAssistantMockAuthorizationWindow implements NhAssistantMcpAuthorizationWindow {\n /** The authorization URLs shown, oldest first. */\n readonly shown: string[] = [];\n /** How many windows were closed without finishing, for example because starting failed. */\n closed = 0;\n\n constructor(private readonly callback: (flowId: string) => NhAssistantMcpAuthorizationOutcome) {}\n\n open(): NhAssistantMcpAuthorizationHandle {\n return {\n authorize: (start: McpAuthorizationStart) => new Observable<NhAssistantMcpAuthorizationOutcome>(subscriber => {\n this.shown.push(start.authorizationUrl);\n const timer = setTimeout(() => {\n subscriber.next(this.callback(start.flowId));\n subscriber.complete();\n });\n return () => clearTimeout(timer);\n }),\n close: () => {\n this.closed++;\n }\n };\n }\n}\n","import { Injectable, InjectionToken, inject, signal } from '@angular/core';\nimport {\n AgentConsultationList,\n AgentUploads,\n ApplicationMessageDetails,\n ApprovalPart,\n ClientContext,\n Conversation,\n ConversationMember,\n ConversationSummary,\n CreateConversationRequest,\n DecideApprovalRequest,\n FileReference,\n LiveAgentWorkChanged,\n LiveConversationChanged,\n LiveConversationEvent,\n LiveConversationRead,\n LiveConversationRemoved,\n Message,\n MessagePart,\n NH_ASSISTANT_CONFIG,\n NhAssistantSseEvent,\n NhAssistantUploadRequest,\n SendMessageRequest,\n TurnUsage,\n applyNhAssistantApprovalDecision,\n applyNhAssistantEvent,\n normalizeNhAssistantClientContext\n} from '@newheap/platform-ai-chat';\nimport { Observable, Subject } from 'rxjs';\nimport { NhAssistantMockAdmin } from './nh-assistant-mock-admin';\nimport { mockFailure } from './nh-assistant-mock-admin-shared';\nimport { NhAssistantMockFiles } from './nh-assistant-mock-files';\nimport { NhAssistantMockAgentRuns } from './nh-assistant-mock-agent-runs';\nimport { NhAssistantMockBoards } from './nh-assistant-mock-boards';\nimport { NhAssistantMockProposals } from './nh-assistant-mock-proposals';\nimport { NhAssistantMockSubjects, divisionSubjectId } from './nh-assistant-mock-subjects';\nimport { mockSystemSubjectType } from './nh-assistant-mock-works-on';\nimport { NhAssistantMockAuthorizationWindow } from './nh-assistant-mock-authorization';\nimport {\n NhAssistantMockApprovalStep,\n NhAssistantMockPerson,\n NhAssistantMockRemoteTool,\n NhAssistantMockRequest,\n NhAssistantMockScenario,\n NhAssistantMockStep,\n NhAssistantMockTurn\n} from './nh-assistant-mock.models';\n\nexport const NH_ASSISTANT_MOCK_SCENARIO = new InjectionToken<NhAssistantMockScenario>('NH_ASSISTANT_MOCK_SCENARIO');\n\n/** Path the mock reports as hub; the mock live service answers it in memory. */\nexport const NH_ASSISTANT_MOCK_HUB_PATH = '/hub/assistant-mock';\n\n/**\n * One live update of the mock, as the assistant hub would send it. Agent work for the whole\n * application (`wholeApplication`) reaches the caller only while a screen watches it, as on the hub.\n */\nexport type NhAssistantMockLiveMessage =\n | { kind: 'changed'; data: LiveConversationChanged }\n | { kind: 'read'; data: LiveConversationRead }\n | { kind: 'removed'; data: LiveConversationRemoved }\n | { kind: 'event'; data: LiveConversationEvent }\n | { kind: 'agent-work'; data: LiveAgentWorkChanged; wholeApplication: boolean };\n\nconst defaultLimits = { maxMessageChars: 4_000, maxToolCallsPerTurn: 8 };\nconst defaultUser: NhAssistantMockPerson = { actorId: 'mock-user', displayName: 'You' };\n\ninterface PendingApproval {\n approval: ApprovalPart;\n invocationId: string;\n assistantMessageId: string;\n step: NhAssistantMockApprovalStep['approval'];\n}\n\n/** When the scenario's consultations started, when they name no time. */\nconst consultationStart = new Date().toISOString();\n\ninterface ActiveRun {\n cancelled: boolean;\n aborted: boolean;\n}\n\nclass RunStopped extends Error {}\n\ntype Emit = (event: NhAssistantSseEvent) => Promise<void>;\n\n/**\n * In-memory implementation of the assistant HTTP API and its event streams. It keeps\n * conversations, plays scripted turns as contract events through a real\n * `text/event-stream` response and handles approvals, cancellation and the feature flag.\n */\n@Injectable()\nexport class NhAssistantMockBackend {\n private readonly scenario = inject(NH_ASSISTANT_MOCK_SCENARIO);\n private readonly config = inject(NH_ASSISTANT_CONFIG);\n private readonly conversations = new Map<string, Conversation>();\n private readonly pendingApprovals = new Map<string, PendingApproval>();\n private readonly runs = new Map<string, ActiveRun>();\n /** Page context of the latest message per conversation, as the server stores it. */\n private readonly pageContexts = new Map<string, ClientContext | null>();\n private readonly enabledState = signal(this.scenario.enabled ?? true);\n private readonly admin = new NhAssistantMockAdmin(this.scenario, () => new Date().toISOString());\n private readonly currentUser = this.scenario.collaboration?.currentUser ?? defaultUser;\n private readonly proposals = new NhAssistantMockProposals(\n this.scenario.proposals,\n () => this.currentUser.actorId,\n () => new Date().toISOString(),\n agentId => this.decidesForApplication(agentId),\n proposal => this.publishAgentWork({\n conversationId: proposal.conversationId,\n reason: 'proposal',\n approvalId: proposal.approvalId,\n runId: proposal.runId,\n subjectType: proposal.subjectType,\n subjectId: proposal.subjectId\n }, proposal.agentId),\n (divisionId: string): boolean => this.subjects.describe(mockSystemSubjectType, divisionSubjectId({ id: divisionId, name: '' }), null, this.admin.administers) != null);\n private readonly subjects = new NhAssistantMockSubjects(\n this.scenario.subjectTypes,\n this.scenario.divisions,\n (type, id) => this.proposals.openOfSubject(type, id));\n private readonly agentRuns = new NhAssistantMockAgentRuns(\n this.scenario,\n this.subjects,\n {\n agents: () => this.admin.allAgents(),\n administers: () => this.admin.administers,\n threadProposals: conversationId => this.proposals.ofThread(conversationId),\n threadConsultations: conversationId => this.consultationsOf(conversationId),\n runProposals: runId => this.proposals.ofRun(runId),\n workChanged: (change, agentId) => this.publishAgentWork(change, agentId)\n },\n () => new Date().toISOString());\n private readonly boards = new NhAssistantMockBoards(\n this.scenario,\n this.subjects,\n this.agentRuns,\n {\n agents: () => this.admin.allAgents(),\n administers: () => this.admin.administers\n },\n () => new Date().toISOString());\n private readonly canAdministerState = signal(this.admin.administers);\n private readonly members = new Map<string, ConversationMember[]>();\n private readonly readPositions = new Map<string, number>();\n private readonly shareTokens = new Map<string, string>();\n private readonly activeActors = new Map<string, string>();\n private readonly liveSubject = new Subject<NhAssistantMockLiveMessage>();\n private readonly files = new NhAssistantMockFiles(this.scenario.refuseUpload, this.scenario.scanUpload);\n private pushEnabled = true;\n private sequence = 0;\n\n /** Requests received so far, oldest first. */\n readonly requests: NhAssistantMockRequest[] = [];\n readonly enabled = this.enabledState.asReadonly();\n readonly canAdminister = this.canAdministerState.asReadonly();\n /** Live updates for the mock live service, in the order the hub would send them. */\n readonly live$: Observable<NhAssistantMockLiveMessage> = this.liveSubject.asObservable();\n\n constructor() {\n for (const conversation of this.scenario.conversations ?? []) {\n const copy = withSequences(structuredClone(conversation));\n this.conversations.set(copy.id, copy);\n this.readPositions.set(copy.id, lastSequence(copy));\n }\n }\n\n /**\n * Plays a scripted turn as another person in the conversation, as if a colleague with an\n * invitation sent a message: the conversation becomes shared, and the message and the\n * answer arrive as live updates. Resolves when the turn ends.\n */\n async simulateParticipantTurn(conversationId: string, person: NhAssistantMockPerson, text: string): Promise<void> {\n const conversation = this.conversations.get(conversationId);\n if (!conversation || !acceptsMessage(conversation.status)) {\n return;\n }\n\n this.addMember(conversationId, person, 'participant');\n const userMessage: Message = {\n id: this.nextId(),\n role: 'user',\n createdAt: new Date().toISOString(),\n parts: [{ type: 'text', text }],\n authorActorId: person.actorId\n };\n this.activeActors.set(conversationId, person.actorId);\n this.update(conversationId, current => ({ ...current, status: 'running', messages: [...current.messages, userMessage] }));\n const stored = this.conversations.get(conversationId)!.messages.find(message => message.id === userMessage.id)!;\n this.emitLive({ kind: 'event', data: { conversationId, actorId: person.actorId, type: 'message.created', data: stored } });\n\n const timing = this.scenario.timing ?? {};\n const assistantMessageId = this.nextId();\n const emit: Emit = async event => {\n await delay(timing.eventDelayMs ?? 40);\n this.update(conversationId, current => applyNhAssistantEvent(current, event));\n if (event.type === 'turn.completed' && event.data.status !== 'waiting-for-approval') {\n this.activeActors.delete(conversationId);\n this.emitChanged(conversationId);\n }\n this.emitLive({ kind: 'event', data: { conversationId, actorId: person.actorId, type: event.type, data: event.data } });\n };\n await delay(timing.firstEventDelayMs ?? 200);\n await emit({ type: 'turn.started', data: { turnId: this.nextId(), userMessageId: userMessage.id, assistantMessageId } });\n const turn = this.findTurn(text, conversation.agentId, null);\n await this.playSteps(conversationId, assistantMessageId, turn?.steps ?? [], emit);\n }\n\n /**\n * Posts a message of the application into a conversation, as `INhAssistantConversationMessages`\n * does on the server: it gets the next position in the conversation and reaches the people of the\n * conversation as a live update. `trusted` marks an instruction for the assistant, as `Trusted`\n * does on the server. Returns the stored message, or `null` for an unknown or archived conversation.\n */\n postApplicationMessage(\n conversationId: string,\n text: string,\n details: Partial<ApplicationMessageDetails> = {}\n ): Message | null {\n const conversation = this.conversations.get(conversationId);\n if (!conversation || conversation.status === 'archived') {\n return null;\n }\n\n const message: Message = {\n id: this.nextId(),\n role: 'application',\n createdAt: new Date().toISOString(),\n parts: [{ type: 'text', text }],\n authorActorId: null,\n authorKind: 'application',\n application: {\n title: details.title ?? null,\n senderName: details.senderName ?? null,\n link: details.link ?? null,\n trusted: details.trusted ?? false\n }\n };\n this.update(conversationId, current => ({ ...current, messages: [...current.messages, message] }));\n const stored = this.conversations.get(conversationId)!.messages.find(item => item.id === message.id)!;\n this.emitLive({ kind: 'event', data: { conversationId, actorId: 'application', type: 'message.created', data: stored } });\n this.emitChanged(conversationId);\n return stored;\n }\n\n /** Switches the simulated `NewHeap:AI:Assistant:Enabled` flag. */\n setEnabled(enabled: boolean): void {\n this.enabledState.set(enabled);\n }\n\n /** Switches whether the caller passes the admin policy (`canAdminister`, `admin/*`). */\n setCanAdminister(canAdminister: boolean): void {\n this.admin.setCanAdminister(canAdminister);\n this.canAdministerState.set(canAdminister);\n }\n\n /** Replaces the tools a simulated MCP server lists; the next sync picks them up. */\n setRemoteTools(serverId: string, tools: NhAssistantMockRemoteTool[]): void {\n this.admin.setRemoteTools(serverId, tools);\n }\n\n /**\n * The window the assistant components open for MCP authorizations; `provideNhAssistantMockApi`\n * provides it as `NH_ASSISTANT_MCP_AUTHORIZATION_WINDOW`.\n */\n readonly authorizationWindow = new NhAssistantMockAuthorizationWindow(flowId => this.admin.authorizeFlow(flowId));\n\n /** What the mock authorization window answers next: the person approves, denies or closes it. */\n setMcpAuthorizationOutcome(outcome: 'approve' | 'deny' | 'cancel'): void {\n this.admin.setMcpAuthorizationOutcome(outcome);\n }\n\n /**\n * Simulates an OAuth connection that ended outside the application: a refused refresh\n * (`reauthorization-required`) or another authorization server (`issuer-changed`).\n */\n setMcpConnectionStatus(serverId: string, status: 'reauthorization-required' | 'issuer-changed'): void {\n this.admin.setMcpConnectionStatus(serverId, status);\n }\n\n /** The files people uploaded, oldest first, as the application's file source stored them. */\n get uploads(): readonly { conversationId: string; name: string; mediaType: string; size: number; reference: FileReference }[] {\n return this.files.uploads;\n }\n\n /**\n * An upload implementation (`NH_ASSISTANT_UPLOAD`) that answers `POST conversations/{id}/files` with\n * the server's checks, after reporting the progress in four steps.\n */\n readonly upload = async (request: NhAssistantUploadRequest): Promise<Response> => {\n const path = this.pathOf(request.url);\n const file = request.body.get('file');\n this.requests.push({\n method: 'POST',\n path: path ?? request.url,\n headers: { ...request.headers },\n body: file instanceof Blob ? { name: file instanceof File ? file.name : null, mediaType: file.type, size: file.size } : undefined\n });\n\n const total = file instanceof Blob ? file.size : 0;\n for (const share of [0.25, 0.5, 0.75, 1]) {\n if (request.signal.aborted) {\n throw new DOMException('The operation was aborted.', 'AbortError');\n }\n await delay(this.scenario.timing?.eventDelayMs ?? 40);\n request.onProgress(Math.round(total * share), total);\n }\n if (request.signal.aborted) {\n throw new DOMException('The operation was aborted.', 'AbortError');\n }\n\n const segments = path?.split('/').map(segment => decodeURIComponent(segment)) ?? [];\n if (!this.enabledState() || segments.length !== 3 || segments[0] !== 'conversations' || segments[2] !== 'files') {\n return this.empty(404);\n }\n const conversation = this.conversations.get(segments[1]);\n if (!conversation) {\n return this.error('assistant-conversation-not-found');\n }\n\n return this.result(await this.files.upload(\n conversation.id,\n this.offersFiles(),\n this.uploadsOf(conversation.agentId),\n request.headers,\n request.body));\n };\n\n /** A `fetch` implementation that answers the assistant endpoints below `apiBaseUrl`. */\n readonly fetch = async (input: string, init: RequestInit): Promise<Response> => {\n const method = (init.method ?? 'GET').toUpperCase();\n const url = new URL(input, 'http://mock.local');\n const path = this.pathOf(input);\n const body = typeof init.body === 'string' && init.body.length > 0 ? JSON.parse(init.body) : undefined;\n\n this.requests.push({ method, path: path ?? url.pathname, headers: { ...(init.headers as Record<string, string>) }, body });\n\n if (init.signal?.aborted) {\n throw new DOMException('The operation was aborted.', 'AbortError');\n }\n if (path === null) {\n return this.empty(404);\n }\n\n return this.route(method, path, url.searchParams, body, languageOf(init.headers));\n };\n\n private route(method: string, path: string, query: URLSearchParams, body: unknown, language: string | null = null): Response {\n const segments = path.split('/').map(segment => decodeURIComponent(segment));\n\n if (method === 'GET' && path === 'status') {\n const limits = { ...defaultLimits, ...this.scenario.limits };\n const collaboration = {\n directory: (this.scenario.collaboration?.directory?.length ?? 0) > 0,\n hubPath: NH_ASSISTANT_MOCK_HUB_PATH,\n push: false,\n maxParticipants: this.maxParticipants()\n };\n return this.json(200, this.enabledState()\n ? { enabled: true, agents: this.admin.chatAgents(), limits, canAdminister: this.admin.administers, collaboration }\n : { enabled: false, agents: [], limits, canAdminister: false });\n }\n if (!this.enabledState()) {\n return this.empty(404);\n }\n\n if (method === 'GET' && path === 'agents') {\n return this.json(200, this.admin.chatAgents());\n }\n if (path === 'preferences') {\n return this.result(this.admin.handlePreferences(method, body));\n }\n if (segments[0] === 'mcp-connections') {\n return this.result(this.admin.handleMcpConnections(method, segments, body));\n }\n if (path === 'notifications') {\n if (method === 'PUT') {\n this.pushEnabled = (body as { pushEnabled?: boolean } | undefined)?.pushEnabled === true;\n }\n return this.json(200, { pushEnabled: this.pushEnabled, pushAvailable: false, publicKey: null });\n }\n if (path === 'notifications/push-subscription') {\n return this.error('assistant-push-unavailable');\n }\n if (segments[0] === 'admin' && segments[1] === 'agents' && segments[3] === 'runs' && segments.length === 4) {\n return this.result(this.agentRuns.handleAgentRuns(method, segments[2], query, language));\n }\n if (segments[0] === 'admin' && segments[1] === 'agents' && segments[3] === 'groups' && segments.length === 4) {\n return this.result(this.boards.handleAdminGroups(method, segments[2], body));\n }\n if (segments[0] === 'admin') {\n const result = this.admin.handleAdmin(method, segments, body, query);\n if (method === 'DELETE' && segments[1] === 'agents' && segments.length === 3 && result.status === 204) {\n this.boards.forget(segments[2]);\n }\n // The run catalog lists the subject types and the groups in the request's language, as the\n // server does; agents carry their groups.\n if (method === 'GET' && segments.length === 2 && segments[1] === 'run-catalog' && result.status === 200) {\n return this.result({\n ...result,\n body: { ...(result.body as object), subjectTypes: this.subjects.catalog(language), agentGroups: this.boards.catalog(language) }\n });\n }\n return this.result(segments[1] === 'agents' && result.status >= 200 && result.status < 300 ? this.withGroups(result) : result);\n }\n if (segments[0] === 'boards') {\n return this.result(this.boards.handle(method, segments, query, language) ?? { status: 404 });\n }\n if (segments[0] === 'subjects') {\n return this.result(this.agentRuns.handleSubjects(method, segments, language)\n ?? this.subjects.handle(method, segments, query, language)\n ?? { status: 404 });\n }\n if (segments[0] === 'runs') {\n return this.result(this.agentRuns.handleRuns(method, segments, query, body, language) ?? { status: 404 });\n }\n if (segments[0] === 'threads') {\n return this.result(this.agentRuns.handleThreads(method, segments, query, body, language) ?? { status: 404 });\n }\n if (segments[0] === 'approvals') {\n return this.result(this.proposals.handle(method, segments, query, body) ?? { status: 404 });\n }\n if (segments[0] !== 'conversations') {\n return this.empty(404);\n }\n\n if (segments.length === 1) {\n if (method === 'GET') {\n return this.json(200, this.list(query));\n }\n if (method === 'POST') {\n return this.create(body as CreateConversationRequest);\n }\n return this.empty(405);\n }\n\n const conversation = this.conversations.get(segments[1]);\n if (!conversation) {\n return this.empty(404);\n }\n\n if (segments.length === 2) {\n if (method === 'GET') {\n return this.json(200, this.view(conversation));\n }\n if (method === 'DELETE') {\n this.conversations.delete(conversation.id);\n this.pendingApprovals.delete(conversation.id);\n this.emitLive({ kind: 'removed', data: { conversationId: conversation.id } });\n return this.empty(204);\n }\n return this.empty(405);\n }\n\n if (method === 'POST' && segments.length === 3 && segments[2] === 'read') {\n return this.markRead(conversation, (body as { sequence?: number } | undefined)?.sequence);\n }\n if (segments.length === 3 && segments[2] === 'share-link') {\n if (method === 'POST') {\n const token = this.nextId().replace(/-/g, '');\n this.shareTokens.set(conversation.id, token);\n return this.json(200, { token });\n }\n if (method === 'DELETE') {\n this.shareTokens.delete(conversation.id);\n return this.empty(204);\n }\n }\n if (method === 'POST' && segments.length === 3 && segments[2] === 'join') {\n const token = (body as { token?: string } | undefined)?.token;\n return token && this.shareTokens.get(conversation.id) === token\n ? this.json(200, this.view(conversation))\n : this.error('assistant-share-link-invalid');\n }\n if (method === 'GET' && segments.length === 3 && segments[2] === 'participant-candidates') {\n return this.candidates(conversation, query.get('query') ?? '');\n }\n if (method === 'POST' && segments.length === 3 && segments[2] === 'participants') {\n return this.invite(conversation, (body as { actorId?: string } | undefined)?.actorId);\n }\n if (method === 'DELETE' && segments.length === 4 && segments[2] === 'participants') {\n const removed = this.removeMember(conversation.id, segments[3]);\n return removed ? this.empty(204) : this.error('assistant-participant-not-found');\n }\n\n if (method === 'POST' && segments.length === 3 && segments[2] === 'messages') {\n return this.sendMessage(conversation, body as SendMessageRequest);\n }\n if (method === 'POST' && segments.length === 3 && segments[2] === 'cancel') {\n return this.cancel(conversation);\n }\n if (method === 'POST' && segments.length === 5 && segments[2] === 'approvals' && segments[4] === 'decide') {\n return this.decide(conversation, segments[3], body as DecideApprovalRequest);\n }\n\n return this.empty(404);\n }\n\n private list(query: URLSearchParams): { items: ConversationSummary[]; total: number } {\n const page = Math.max(1, Number(query.get('page') ?? 1));\n const itemsPerPage = Math.max(1, Number(query.get('itemsPerPage') ?? 20));\n const all = [...this.conversations.values()]\n .sort((left, right) => right.updatedAt.localeCompare(left.updatedAt))\n .map(conversation => this.summary(conversation));\n\n return { items: all.slice((page - 1) * itemsPerPage, page * itemsPerPage), total: all.length };\n }\n\n private create(request: CreateConversationRequest): Response {\n const agent = this.admin.chatAgents().find(item => item.id === request?.agentId);\n if (!agent) {\n return this.empty(400);\n }\n\n const now = new Date().toISOString();\n const conversation: Conversation = {\n id: this.nextId(),\n agentId: agent.id,\n agentVersion: agent.version,\n title: request.title ?? null,\n status: 'idle',\n createdAt: now,\n updatedAt: now,\n messages: [],\n pendingApproval: null\n };\n this.conversations.set(conversation.id, conversation);\n this.readPositions.set(conversation.id, 0);\n\n return this.json(201, this.view(conversation));\n }\n\n private sendMessage(conversation: Conversation, request: SendMessageRequest): Response {\n const text = request?.text?.trim() ?? '';\n const limit = this.scenario.limits?.maxMessageChars ?? defaultLimits.maxMessageChars;\n if (text.length === 0 || text.length > limit || !request.clientMessageId) {\n return this.empty(400);\n }\n // Like the server: the attachments are checked before the turn claims the conversation.\n const uploads = this.uploadsOf(conversation.agentId);\n const filesCode = this.files.checkMessage(request.files, this.offersFiles(), uploads?.maxFiles ?? 5);\n if (filesCode) {\n return this.error(filesCode);\n }\n if (!acceptsMessage(conversation.status)) {\n return this.empty(409);\n }\n\n // Like the server: an invalid page context is dropped, never a 400.\n const pageContext = normalizeNhAssistantClientContext(request.clientContext);\n this.pageContexts.set(conversation.id, pageContext);\n const turn = this.findTurn(text, conversation.agentId, pageContext);\n const userMessageId = this.nextId();\n const assistantMessageId = this.nextId();\n const files: FileReference[] = request.files ?? [];\n // The turn opens the attachments with the sender's rights; it ends with the first refusal and the\n // message keeps only what the model read.\n const refusal = files.length === 0 ? null : uploads ? this.files.openCode(conversation.id, files) : 'assistant-files-not-accepted';\n const parts: MessagePart[] = [\n { type: 'text', text },\n ...(refusal ? [] : files.map(file => ({ type: 'file' as const, name: file.name, mediaType: file.mediaType, size: file.size })))\n ];\n this.activeActors.set(conversation.id, this.currentUser.actorId);\n this.update(conversation.id, current => ({\n ...current,\n title: current.title ?? text.slice(0, 60),\n status: 'running',\n messages: [\n ...current.messages,\n { id: userMessageId, role: 'user', createdAt: new Date().toISOString(), parts, authorActorId: this.currentUser.actorId }\n ]\n }));\n // The sender has read their own message.\n this.readPositions.set(conversation.id, lastSequence(this.conversations.get(conversation.id)!));\n\n return this.stream(conversation.id, async emit => {\n await emit({ type: 'turn.started', data: { turnId: this.nextId(), userMessageId, assistantMessageId } });\n const steps: NhAssistantMockStep[] = refusal\n ? [{ error: { code: refusal, messageKey: `nh-assistant.errors.${refusal}` } }]\n : turn?.steps ?? [];\n await this.playSteps(conversation.id, assistantMessageId, steps, emit);\n });\n }\n\n /**\n * `POST conversations/{id}/approvals/{approvalId}/decide`: approves or rejects the approval the\n * turn waits for, or leaves a consulted agent's proposal with a `leaveRoute` for the subject's\n * approvers (`leave`). Leaving closes it here, names the proposal that now waits at the subject\n * (`consultation.movedToApprovalId`) and resumes the turn with the step's `left` steps.\n */\n private decide(conversation: Conversation, approvalId: string, request: DecideApprovalRequest): Response {\n const pending = this.pendingApprovals.get(conversation.id);\n if (!pending || pending.approval.approvalId !== approvalId) {\n return this.empty(404);\n }\n const decider = this.activeActors.get(conversation.id);\n if (decider && decider !== this.currentUser.actorId) {\n return this.error('assistant-approval-forbidden');\n }\n const decision = request?.decision;\n if (decision !== 'approve' && decision !== 'reject' && decision !== 'leave') {\n return this.error('assistant-approval-decision-invalid');\n }\n if (decision === 'leave' && !pending.approval.consultation) {\n return this.error('assistant-approval-decision-invalid');\n }\n if (decision === 'leave' && !pending.approval.consultation?.leaveRoute) {\n return this.error('assistant-consult-proposal-refused');\n }\n if (request.expectedProposalHash !== pending.approval.proposalHash) {\n return this.empty(409);\n }\n if (Date.parse(pending.approval.expiresAt) <= Date.now()) {\n return this.empty(409);\n }\n\n this.pendingApprovals.delete(conversation.id);\n const lastUser = [...conversation.messages].reverse().find(message => message.role === 'user');\n this.update(conversation.id, current => applyNhAssistantApprovalDecision(current, approvalId, decision));\n if (decision === 'leave') {\n const movedToApprovalId = this.nextId();\n this.update(conversation.id, current => withMovedApproval(current, approvalId, movedToApprovalId));\n }\n\n return this.stream(conversation.id, async emit => {\n await emit({\n type: 'turn.started',\n data: { turnId: this.nextId(), userMessageId: lastUser?.id ?? pending.assistantMessageId, assistantMessageId: pending.assistantMessageId }\n });\n\n if (decision === 'approve') {\n await emit({\n type: 'tool.completed',\n data: { invocationId: pending.invocationId, status: 'succeeded', resultCode: null, resultPreview: pending.step.resultPreview ?? null }\n });\n await this.playSteps(conversation.id, pending.assistantMessageId, pending.step.approved, emit);\n } else if (decision === 'leave') {\n // The consult call ends: its proposal now waits for the subject's approvers.\n await emit({\n type: 'tool.completed',\n data: { invocationId: pending.invocationId, status: 'succeeded', resultCode: 'assistant-consult-proposal-moved', resultPreview: null }\n });\n await this.playSteps(conversation.id, pending.assistantMessageId, pending.step.left ?? [], emit);\n } else {\n await this.playSteps(conversation.id, pending.assistantMessageId, pending.step.rejected, emit);\n }\n });\n }\n\n private cancel(conversation: Conversation): Response {\n const run = this.runs.get(conversation.id);\n if (run) {\n run.cancelled = true;\n return this.empty(202);\n }\n\n const pending = this.pendingApprovals.get(conversation.id);\n if (pending) {\n this.pendingApprovals.delete(conversation.id);\n this.update(conversation.id, current => ({\n ...applyNhAssistantApprovalDecision(current, pending.approval.approvalId, 'reject'),\n status: 'idle'\n }));\n }\n\n return this.empty(202);\n }\n\n private async playSteps(conversationId: string, assistantMessageId: string, steps: NhAssistantMockStep[], emit: Emit): Promise<void> {\n const usage: TurnUsage = { inputTokens: 180, outputTokens: 0, toolCalls: 0 };\n const complete = (status: 'completed' | 'failed', errorCode: string | null = null) =>\n emit({ type: 'turn.completed', data: { turnId: this.nextId(), status, usage, errorCode } });\n\n for (const step of steps) {\n if ('text' in step) {\n const text = typeof step.text === 'function' ? step.text(this.pageContexts.get(conversationId) ?? null) : step.text;\n for (const piece of text.match(/\\S+\\s*|\\s+/g) ?? []) {\n usage.outputTokens++;\n await emit({ type: 'message.delta', data: { messageId: assistantMessageId, text: piece } });\n }\n } else if ('tool' in step) {\n const invocationId = this.nextId();\n usage.toolCalls++;\n await emit({\n type: 'tool.started',\n data: {\n invocationId,\n toolId: step.tool.toolId,\n toolVersion: step.tool.toolVersion ?? 1,\n displayName: step.tool.displayName,\n argumentsPreview: step.tool.argumentsPreview ?? null\n }\n });\n await emit({\n type: 'tool.completed',\n data: {\n invocationId,\n status: step.tool.status ?? 'succeeded',\n resultCode: step.tool.resultCode ?? null,\n resultPreview: step.tool.resultPreview ?? null\n }\n });\n } else if ('approval' in step) {\n await this.pauseForApproval(conversationId, assistantMessageId, step.approval, emit);\n usage.toolCalls++;\n await emit({ type: 'turn.completed', data: { turnId: this.nextId(), status: 'waiting-for-approval', usage, errorCode: null } });\n return;\n } else if ('error' in step) {\n await emit({ type: 'error', data: step.error });\n // The mock keeps the conversation usable after a failed turn.\n this.update(conversationId, current => ({ ...current, status: 'idle' }));\n return;\n } else if ('fail' in step) {\n await complete('failed', step.fail.errorCode);\n return;\n } else if ('connectionRequired' in step) {\n const needed = this.admin.connectionNeeded(step.connectionRequired.serverId);\n if (!needed) {\n continue;\n }\n await emit({ type: 'connection.required', data: { serverId: step.connectionRequired.serverId, ...needed } });\n for (const piece of step.connectionRequired.text?.match(/\\S+\\s*|\\s+/g) ?? []) {\n usage.outputTokens++;\n await emit({ type: 'message.delta', data: { messageId: assistantMessageId, text: piece } });\n }\n break;\n }\n }\n\n await complete('completed');\n }\n\n private async pauseForApproval(\n conversationId: string,\n assistantMessageId: string,\n step: NhAssistantMockApprovalStep['approval'],\n emit: Emit\n ): Promise<void> {\n const invocationId = this.nextId();\n await emit({\n type: 'tool.started',\n data: {\n invocationId,\n toolId: step.toolId,\n toolVersion: step.toolVersion ?? 1,\n displayName: step.displayName,\n argumentsPreview: step.argumentsPreview\n }\n });\n\n const approval: ApprovalPart = {\n type: 'approval',\n approvalId: this.nextId(),\n proposalId: this.nextId(),\n proposalHash: `sha256:${this.nextId().replace(/-/g, '')}`,\n toolId: step.toolId,\n summary: step.summary,\n presentation: step.presentation,\n argumentsPreview: step.argumentsPreview,\n targets: step.targets,\n expiresAt: new Date(Date.now() + (step.expiresInSeconds ?? 300) * 1000).toISOString(),\n status: 'pending',\n ...(step.consultation\n ? {\n consultation: {\n consultationId: step.consultation.consultationId ?? this.nextId(),\n agentId: step.consultation.agentId,\n subjectType: step.consultation.subjectType,\n subjectId: step.consultation.subjectId,\n subjectDisplayName: step.consultation.subjectDisplayName ?? null,\n leaveRoute: step.consultation.leaveRoute ?? null,\n answer: step.consultation.answer ?? null,\n movedToApprovalId: null\n }\n }\n : {})\n };\n this.pendingApprovals.set(conversationId, { approval, invocationId, assistantMessageId, step });\n await emit({ type: 'approval.required', data: approval });\n }\n\n private stream(conversationId: string, play: (emit: Emit) => Promise<void>): Response {\n const timing = this.scenario.timing ?? {};\n const firstDelay = timing.firstEventDelayMs ?? 200;\n const eventDelay = timing.eventDelayMs ?? 40;\n const chunkSize = Math.max(1, timing.chunkSize ?? 23);\n const encoder = new TextEncoder();\n const run: ActiveRun = { cancelled: false, aborted: false };\n this.runs.set(conversationId, run);\n\n let first = true;\n let eventCount = 0;\n\n return new Response(new ReadableStream<Uint8Array>({\n start: controller => {\n const write = (text: string) => {\n const bytes = encoder.encode(text);\n for (let offset = 0; offset < bytes.length; offset += chunkSize) {\n controller.enqueue(bytes.slice(offset, offset + chunkSize));\n }\n };\n\n const emit: Emit = async event => {\n await delay(first ? firstDelay : eventDelay);\n first = false;\n if (run.aborted) {\n throw new RunStopped();\n }\n if (run.cancelled && event.type !== 'turn.started') {\n throw new RunStopped();\n }\n\n this.update(conversationId, current => applyNhAssistantEvent(current, event));\n if (eventCount++ % 5 === 2) {\n write(': keep-alive\\n\\n');\n }\n write(`event: ${event.type}\\ndata: ${JSON.stringify(event.data)}\\n\\n`);\n };\n\n void play(emit)\n .catch(async error => {\n if (!(error instanceof RunStopped) || run.aborted) {\n return;\n }\n\n const usage = { inputTokens: 180, outputTokens: 0, toolCalls: 0 };\n const cancelled: NhAssistantSseEvent = { type: 'turn.completed', data: { turnId: this.nextId(), status: 'cancelled', usage, errorCode: null } };\n this.update(conversationId, current => applyNhAssistantEvent(current, cancelled));\n write(`event: ${cancelled.type}\\ndata: ${JSON.stringify(cancelled.data)}\\n\\n`);\n })\n .finally(() => {\n if (this.runs.get(conversationId) === run) {\n this.runs.delete(conversationId);\n }\n if (!run.aborted) {\n controller.close();\n }\n });\n },\n cancel: () => {\n run.aborted = true;\n }\n }), { status: 200, headers: { 'content-type': 'text/event-stream; charset=utf-8', 'cache-control': 'no-cache' } });\n }\n\n private findTurn(text: string, agentId: string, pageContext: ClientContext | null): NhAssistantMockTurn | undefined {\n return this.scenario.turns.find(turn => {\n const match = turn.match;\n if (match === undefined) {\n return true;\n }\n if (typeof match === 'string') {\n return text.toLowerCase().includes(match.toLowerCase());\n }\n if (match instanceof RegExp) {\n return match.test(text);\n }\n return match(text, agentId, pageContext);\n });\n }\n\n private update(conversationId: string, change: (conversation: Conversation) => Conversation): void {\n const conversation = this.conversations.get(conversationId);\n if (!conversation) {\n return;\n }\n const updated = withSequences({ ...change(conversation), updatedAt: new Date().toISOString() });\n if (updated.status !== 'running' && updated.status !== 'waiting-for-approval') {\n this.activeActors.delete(conversationId);\n }\n this.conversations.set(conversationId, updated);\n if (updated.status !== conversation.status || updated.title !== conversation.title) {\n this.emitChanged(conversationId);\n }\n }\n\n /** The conversation as the signed-in user sees it. */\n private view(conversation: Conversation): Conversation {\n const members = this.members.get(conversation.id) ?? [];\n return {\n ...conversation,\n ...this.summary(conversation),\n members,\n shareToken: this.shareTokens.get(conversation.id) ?? null,\n currentActorId: this.currentUser.actorId\n };\n }\n\n private summary(conversation: Conversation): ConversationSummary {\n const latest = lastSequence(conversation);\n const members = this.members.get(conversation.id) ?? [];\n return {\n id: conversation.id,\n agentId: conversation.agentId,\n title: conversation.title,\n status: conversation.status,\n createdAt: conversation.createdAt,\n updatedAt: conversation.updatedAt,\n role: 'owner',\n participantCount: Math.max(0, members.length - 1),\n lastMessageSequence: latest,\n lastReadSequence: Math.min(this.readPositions.get(conversation.id) ?? latest, latest),\n activeActorId: this.activeActors.get(conversation.id) ?? null\n };\n }\n\n private markRead(conversation: Conversation, sequence: number | undefined): Response {\n const latest = lastSequence(conversation);\n const target = Math.min(sequence ?? latest, latest);\n if (target > (this.readPositions.get(conversation.id) ?? 0)) {\n this.readPositions.set(conversation.id, target);\n this.emitLive({ kind: 'read', data: { conversationId: conversation.id, lastReadSequence: target } });\n }\n return this.empty(204);\n }\n\n private candidates(conversation: Conversation, query: string): Response {\n const directory = this.scenario.collaboration?.directory ?? [];\n if (directory.length === 0) {\n return this.error('assistant-directory-unavailable');\n }\n const text = query.trim().toLowerCase();\n if (text.length < 2) {\n return this.error('assistant-validation');\n }\n const members = new Set((this.members.get(conversation.id) ?? []).map(member => member.actorId));\n return this.json(200, directory\n .filter(person => person.actorId !== this.currentUser.actorId && !members.has(person.actorId))\n .filter(person => person.displayName.toLowerCase().includes(text))\n .map(person => ({ actorId: person.actorId, displayName: person.displayName, detail: person.detail ?? null })));\n }\n\n private invite(conversation: Conversation, actorId: string | undefined): Response {\n const person = (this.scenario.collaboration?.directory ?? []).find(item => item.actorId === actorId);\n if (!person) {\n return this.error('assistant-participant-not-found');\n }\n const participants = (this.members.get(conversation.id) ?? []).filter(member => member.role === 'participant');\n if (participants.length >= this.maxParticipants()) {\n return this.error('assistant-participant-limit-reached');\n }\n this.addMember(conversation.id, person, 'participant');\n return this.empty(204);\n }\n\n private addMember(conversationId: string, person: NhAssistantMockPerson, role: ConversationMember['role']): void {\n const members = this.members.get(conversationId) ?? [];\n if (members.some(member => member.actorId === person.actorId)) {\n return;\n }\n const joinedAt = new Date().toISOString();\n const owner: ConversationMember[] = members.length === 0\n ? [{ actorId: this.currentUser.actorId, displayName: this.currentUser.displayName, role: 'owner', joinedAt }]\n : [];\n this.members.set(conversationId, [...members, ...owner, { actorId: person.actorId, displayName: person.displayName, role, joinedAt }]);\n this.emitChanged(conversationId);\n }\n\n private removeMember(conversationId: string, actorId: string): boolean {\n const members = this.members.get(conversationId) ?? [];\n if (!members.some(member => member.actorId === actorId && member.role === 'participant')) {\n return false;\n }\n const remaining = members.filter(member => member.actorId !== actorId);\n this.members.set(conversationId, remaining.length > 1 ? remaining : []);\n this.emitChanged(conversationId);\n return true;\n }\n\n private emitChanged(conversationId: string): void {\n const conversation = this.conversations.get(conversationId);\n if (!conversation) {\n return;\n }\n const summary = this.summary(conversation);\n this.emitLive({\n kind: 'changed',\n data: {\n conversationId,\n status: summary.status,\n title: summary.title,\n updatedAt: summary.updatedAt,\n activeActorId: summary.activeActorId ?? null,\n lastMessageSequence: summary.lastMessageSequence ?? 0,\n participantCount: summary.participantCount ?? 0\n }\n });\n }\n\n /**\n * Announces that the work of an agent changed, as the server does after its runs and proposals:\n * the work of an object reaches the caller, the work of the whole application only when the caller\n * passes the agent's view policy, by default its required policy, and only while a screen watches it\n * (`NhAssistantMockLiveService.watchAgentWork`). The mock runs no agents on its own; call it to show a\n * screen what a run in the background would change. Runs by hand and decisions announce themselves.\n */\n publishAgentWork(change: LiveAgentWorkChanged, agentId: string): void {\n const wholeApplication = change.subjectType === 'nh-system';\n if (wholeApplication && !this.readsApplicationWork(agentId)) {\n return;\n }\n\n this.emitLive({ kind: 'agent-work', data: change, wholeApplication });\n }\n\n private emitLive(message: NhAssistantMockLiveMessage): void {\n // Delivered after the current request, as a hub message would arrive.\n queueMicrotask(() => this.liveSubject.next(message));\n }\n\n private maxParticipants(): number {\n return this.scenario.collaboration?.maxParticipants ?? 20;\n }\n\n /** A contract error with the one status the server gives its code. */\n private error(code: string): Response {\n return this.result(mockFailure(code));\n }\n\n /** The path below `apiBaseUrl`, or `null` for another URL. */\n private pathOf(input: string): string | null {\n const url = new URL(input, 'http://mock.local');\n const base = new URL(this.config.apiBaseUrl.replace(/\\/+$/, ''), 'http://mock.local').pathname;\n return url.pathname.startsWith(`${base}/`) ? url.pathname.slice(base.length + 1) : null;\n }\n\n /** Whether the application keeps files for the assistant: an agent of the scenario takes uploads. */\n private offersFiles(): boolean {\n return this.scenario.agents.some(agent => !!agent.uploads);\n }\n\n /** What people may attach to a message to the agent, as its summary says. */\n private uploadsOf(agentId: string): AgentUploads | null {\n return this.admin.chatAgents().find(agent => agent.id === agentId)?.uploads\n ?? this.scenario.agents.find(agent => agent.id === agentId)?.uploads\n ?? null;\n }\n\n /**\n * Whether the caller decides the agent's proposals of the whole application: an approver of the whole\n * application (an administrator in the mock) who passes the agent's view policy, by default its\n * required policy.\n */\n /** Whether the caller passes the agent's view policy, by default its required policy. */\n private readsApplicationWork(agentId: string): boolean {\n const agent = this.admin.allAgents().find(item => item.id === agentId);\n const policy = agent?.viewPolicy ?? agent?.requiredPolicy ?? null;\n return policy === null || (this.scenario.callerPolicies?.includes(policy) ?? true);\n }\n\n private decidesForApplication(agentId: string): boolean {\n if (!this.admin.administers) {\n return false;\n }\n const agent = this.admin.allAgents().find(item => item.id === agentId);\n const policy = agent?.viewPolicy ?? agent?.requiredPolicy ?? null;\n return policy === null || (this.scenario.callerPolicies?.includes(policy) ?? true);\n }\n\n /**\n * The scenario's consultations of a thread's agent, newest first, each with the proposals of the\n * scenario that name it, counted per route; `null` when the scenario lists none there.\n */\n private consultationsOf(conversationId: string): AgentConsultationList | null {\n const listed = (this.scenario.consultations ?? []).filter(item => item.conversationId === conversationId);\n if (listed.length === 0) {\n return null;\n }\n\n const items = listed\n .map(item => {\n const proposals = this.proposals.consultationCounts(item.id);\n const createdAt = item.createdAt ?? consultationStart;\n const status = item.status ?? 'completed';\n return {\n id: item.id,\n askerActorId: item.askerActorId,\n askerDisplayName: item.askerDisplayName ?? null,\n askingAgentId: item.askingAgentId ?? null,\n depth: 1,\n status,\n failureCode: status === 'failed' ? 'assistant-consult-failed' : null,\n toolCalls: 0,\n inputTokens: 0,\n outputTokens: 0,\n proposalCount: proposals.total,\n createdAt,\n endedAt: status === 'running' ? null : createdAt,\n proposalsByRoute: proposals.byRoute\n };\n })\n .sort((left, right) => right.createdAt.localeCompare(left.createdAt));\n return { items, total: items.length };\n }\n\n private nextId(): string {\n this.sequence++;\n const suffix = this.sequence.toString(16).padStart(12, '0');\n return `00000000-0000-4000-8000-${suffix}`;\n }\n\n /** An administration answer about agents with each agent's groups, as the server answers it. */\n private withGroups(result: { status: number; body?: unknown }): { status: number; body?: unknown } {\n const enrich = (item: unknown): unknown => {\n const agent = item as { id?: unknown; source?: unknown } | null;\n return agent && typeof agent.id === 'string' && typeof agent.source === 'string'\n ? { ...agent, ...this.groupsOf(agent.id) }\n : item;\n };\n return Array.isArray(result.body) ? { ...result, body: result.body.map(enrich) } : { ...result, body: enrich(result.body) };\n }\n\n private groupsOf(agentId: string): { groups: string[]; codeGroups: string[] } {\n const membership = this.boards.membership(agentId);\n return { groups: membership.groups, codeGroups: membership.codeGroups };\n }\n\n private result(result: { status: number; body?: unknown }): Response {\n return result.body === undefined ? this.empty(result.status) : this.json(result.status, result.body);\n }\n\n private json(status: number, value: unknown): Response {\n return new Response(JSON.stringify(value), { status, headers: { 'content-type': 'application/json' } });\n }\n\n private empty(status: number): Response {\n return new Response(null, { status });\n }\n}\n\nfunction languageOf(headers: RequestInit['headers']): string | null {\n const values = new Headers(headers ?? {});\n return values.get('Accept-Language');\n}\n\nfunction delay(milliseconds: number): Promise<void> {\n return new Promise(resolve => setTimeout(resolve, milliseconds));\n}\n\n/**\n * A consulted agent's proposal the person left for the subject's approvers, as the server reads it\n * afterwards: closed here and naming the proposal that waits at the subject.\n */\nfunction withMovedApproval(conversation: Conversation, approvalId: string, movedToApprovalId: string): Conversation {\n const moved = (part: MessagePart): MessagePart =>\n part.type === 'approval' && part.approvalId === approvalId && part.consultation\n ? { ...part, status: 'rejected', consultation: { ...part.consultation, leaveRoute: null, movedToApprovalId } }\n : part;\n return {\n ...conversation,\n messages: conversation.messages.map(message => ({ ...message, parts: message.parts.map(moved) }))\n };\n}\n\n/** Like the server: a new message starts in an idle conversation or after a failed turn. */\nfunction acceptsMessage(status: Conversation['status']): boolean {\n return status === 'idle' || status === 'failed';\n}\n\n/** Numbers messages in order, as the server does, keeping numbers that are already set. */\nfunction withSequences(conversation: Conversation): Conversation {\n let next = lastSequence(conversation);\n if (conversation.messages.every(message => message.sequence !== undefined)) {\n return conversation;\n }\n return {\n ...conversation,\n messages: conversation.messages.map(message => message.sequence === undefined ? { ...message, sequence: ++next } : message)\n };\n}\n\nfunction lastSequence(conversation: Conversation): number {\n return conversation.messages.reduce((maximum, message) => Math.max(maximum, message.sequence ?? 0), 0);\n}\n","import { DestroyRef, Injectable, computed, inject, signal } from '@angular/core';\nimport {\n LiveAgentWorkChanged,\n LiveConversationChanged,\n LiveConversationEvent,\n LiveConversationRead,\n LiveConversationRemoved,\n NhAssistantLiveService,\n NhAssistantLiveState\n} from '@newheap/platform-ai-chat';\nimport { Observable, Subject, Subscription } from 'rxjs';\nimport { NhAssistantMockBackend } from './nh-assistant-mock-backend';\n\ntype NhAssistantLiveSurface = Pick<\n NhAssistantLiveService,\n 'changed$' | 'read$' | 'removed$' | 'events$' | 'agentWork$' | 'resync$' | 'state' | 'connect' | 'stop' | 'watchAgentWork'\n>;\n\n/**\n * Stands in for the SignalR live service: it delivers the mock back-end's live updates in\n * memory, so shared conversations, other tabs and parallel turns behave as with a real hub. The work\n * of agents for the whole application arrives only while a screen watches it, as on the hub.\n */\n@Injectable()\nexport class NhAssistantMockLiveService implements NhAssistantLiveSurface {\n private readonly backend = inject(NhAssistantMockBackend);\n private readonly changedSubject = new Subject<LiveConversationChanged>();\n private readonly readSubject = new Subject<LiveConversationRead>();\n private readonly removedSubject = new Subject<LiveConversationRemoved>();\n private readonly eventSubject = new Subject<LiveConversationEvent>();\n private readonly agentWorkSubject = new Subject<LiveAgentWorkChanged>();\n private readonly resyncSubject = new Subject<void>();\n private readonly watchers = signal(0);\n private readonly stateSignal = signal<NhAssistantLiveState>('off');\n private subscription?: Subscription;\n\n readonly changed$: Observable<LiveConversationChanged> = this.changedSubject.asObservable();\n readonly read$: Observable<LiveConversationRead> = this.readSubject.asObservable();\n readonly removed$: Observable<LiveConversationRemoved> = this.removedSubject.asObservable();\n readonly events$: Observable<LiveConversationEvent> = this.eventSubject.asObservable();\n /** The work of agents that changed: runs by hand, decisions and `NhAssistantMockBackend.publishAgentWork`. */\n readonly agentWork$: Observable<LiveAgentWorkChanged> = this.agentWorkSubject.asObservable();\n /** Whether a screen watches the work of agents for the whole application. */\n readonly watching = computed(() => this.watchers() > 0);\n readonly resync$: Observable<void> = this.resyncSubject.asObservable();\n readonly state = this.stateSignal.asReadonly();\n\n constructor() {\n inject(DestroyRef).onDestroy(() => this.subscription?.unsubscribe());\n }\n\n async connect(hubPath: string | null): Promise<void> {\n await this.stop();\n if (!hubPath) {\n return;\n }\n this.subscription = this.backend.live$.subscribe(message => {\n switch (message.kind) {\n case 'changed':\n this.changedSubject.next(message.data);\n break;\n case 'read':\n this.readSubject.next(message.data);\n break;\n case 'removed':\n this.removedSubject.next(message.data);\n break;\n case 'event':\n this.eventSubject.next(message.data);\n break;\n case 'agent-work':\n if (!message.wholeApplication || this.watchers() > 0) {\n this.agentWorkSubject.next(message.data);\n }\n break;\n }\n });\n this.stateSignal.set('connected');\n this.resyncSubject.next();\n }\n\n /** Follows the work of agents for the whole application until the returned function is called. */\n watchAgentWork(): () => void {\n this.watchers.update(count => count + 1);\n let released = false;\n return () => {\n if (!released) {\n released = true;\n this.watchers.update(count => Math.max(0, count - 1));\n }\n };\n }\n\n async stop(): Promise<void> {\n this.subscription?.unsubscribe();\n this.subscription = undefined;\n this.stateSignal.set('off');\n }\n}\n","import { EnvironmentProviders, inject, makeEnvironmentProviders } from '@angular/core';\nimport {\n NH_ASSISTANT_FETCH,\n NH_ASSISTANT_MCP_AUTHORIZATION_WINDOW,\n NH_ASSISTANT_UPLOAD,\n NhAssistantLiveService\n} from '@newheap/platform-ai-chat';\nimport { NH_ASSISTANT_MOCK_SCENARIO, NhAssistantMockBackend } from './nh-assistant-mock-backend';\nimport { NhAssistantMockLiveService } from './nh-assistant-mock-live';\nimport { NhAssistantMockScenario } from './nh-assistant-mock.models';\n\n/**\n * Replaces the assistant transport with an in-memory back-end that plays `script`.\n * Register it after `provideNhAssistant(...)` in the same injector. Every client feature\n * (status, agents, conversations, streamed turns, approvals, cancellation, sharing, read\n * state, live updates, uploads with their progress and MCP authorizations) then works without a\n * server. Inject `NhAssistantMockBackend` to switch the feature flag, simulate a colleague or\n * inspect the received requests and uploads.\n */\nexport function provideNhAssistantMockApi(script: NhAssistantMockScenario): EnvironmentProviders {\n return makeEnvironmentProviders([\n { provide: NH_ASSISTANT_MOCK_SCENARIO, useValue: script },\n NhAssistantMockBackend,\n { provide: NH_ASSISTANT_FETCH, useFactory: () => inject(NhAssistantMockBackend).fetch },\n { provide: NH_ASSISTANT_UPLOAD, useFactory: () => inject(NhAssistantMockBackend).upload },\n { provide: NhAssistantLiveService, useClass: NhAssistantMockLiveService },\n { provide: NH_ASSISTANT_MCP_AUTHORIZATION_WINDOW, useFactory: () => inject(NhAssistantMockBackend).authorizationWindow }\n ]);\n}\n","/*\n * Public API surface of @newheap/platform-ai-chat/testing.\n */\nexport * from './nh-assistant-mock.models';\nexport type { NhAssistantMockUpload } from './nh-assistant-mock-files';\nexport * from './nh-assistant-mock-backend';\nexport * from './nh-assistant-mock-live';\nexport * from './nh-assistant-mock-authorization';\nexport * from './provide-nh-assistant-mock-api';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["failure","subjectTypePattern","dataClassifications","validationFailure","maxStateReason","maxInstructions","hashText","classifications","mediaTypePattern","normalizeMediaType","maxDescription","key","text","maxReason","covers","dashCase","maxMessage","ɵnhAssistantMediaTypeOf","systemType","guidN","maxItemsPerPage","guid"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"newheap-platform-ai-chat-testing.mjs","sources":["../../../projects/nh-ai-chat/testing/src/nh-assistant-mock-status.ts","../../../projects/nh-ai-chat/testing/src/nh-assistant-mock-admin-shared.ts","../../../projects/nh-ai-chat/testing/src/nh-assistant-mock-accounts.ts","../../../projects/nh-ai-chat/testing/src/nh-assistant-mock-works-on.ts","../../../projects/nh-ai-chat/testing/src/nh-assistant-mock-admin-agents.ts","../../../projects/nh-ai-chat/testing/src/nh-assistant-mock-admin-mcp.ts","../../../projects/nh-ai-chat/testing/src/nh-assistant-mock-hand-offs.ts","../../../projects/nh-ai-chat/testing/src/nh-assistant-mock-consultations.ts","../../../projects/nh-ai-chat/testing/src/nh-assistant-mock-instruction-assets.ts","../../../projects/nh-ai-chat/testing/src/nh-assistant-mock-run-configuration.ts","../../../projects/nh-ai-chat/testing/src/nh-assistant-mock-admin.ts","../../../projects/nh-ai-chat/testing/src/nh-assistant-mock-agent-packages.ts","../../../projects/nh-ai-chat/testing/src/nh-assistant-mock-files.ts","../../../projects/nh-ai-chat/testing/src/nh-assistant-mock-subjects.ts","../../../projects/nh-ai-chat/testing/src/nh-assistant-mock-agent-runs.ts","../../../projects/nh-ai-chat/testing/src/nh-assistant-mock-boards.ts","../../../projects/nh-ai-chat/testing/src/nh-assistant-mock-agent-metadata.ts","../../../projects/nh-ai-chat/testing/src/nh-assistant-mock-proposals.ts","../../../projects/nh-ai-chat/testing/src/nh-assistant-mock-authorization.ts","../../../projects/nh-ai-chat/testing/src/nh-assistant-mock-backend.ts","../../../projects/nh-ai-chat/testing/src/nh-assistant-mock-live.ts","../../../projects/nh-ai-chat/testing/src/provide-nh-assistant-mock-api.ts","../../../projects/nh-ai-chat/testing/src/public-api.ts","../../../projects/nh-ai-chat/testing/src/newheap-platform-ai-chat-testing.ts"],"sourcesContent":["/**\n * The HTTP status of every failure code, as the server's one table maps them for every assistant\n * endpoint (chat, administration, agent runs, subjects, run histories, boards, MCP and OAuth). Each\n * code has exactly one status; a code the table does not name answers 400, as on the server. Every\n * failure of the mock API takes its status from here, so the mock never answers a code with a status\n * the server would not use.\n */\nconst statusTable: Readonly<Record<number, readonly string[]>> = {\n 400: [\n 'assistant-validation',\n 'assistant-message-invalid',\n 'assistant-message-too-long',\n 'assistant-title-invalid',\n 'assistant-approval-decision-invalid',\n 'assistant-approval-expired',\n 'assistant-approval-invalid',\n 'assistant-subject-invalid',\n 'assistant-service-account-not-found',\n 'assistant-run-not-retryable',\n 'assistant-run-filter-invalid',\n 'assistant-board-scope-invalid',\n 'assistant-feedback-invalid',\n 'assistant-question-invalid',\n 'assistant-question-answer-invalid',\n 'assistant-trigger-filter-not-found',\n 'assistant-replay-not-shadow',\n 'assistant-evaluation-not-variant',\n 'assistant-instructions-too-long',\n 'assistant-push-subscription-invalid',\n 'assistant-webhook-payload-invalid',\n 'assistant-mcp-host-blocked',\n 'assistant-mcp-secret-reference-invalid',\n 'assistant-mcp-certificate-reference-invalid',\n 'assistant-mcp-scope-not-allowed',\n 'assistant-mcp-authorization-failed',\n 'assistant-mcp-authorization-expired',\n 'assistant-mcp-authorization-invalid',\n 'assistant-mcp-pkce-unsupported',\n 'assistant-mcp-client-registration-required',\n 'assistant-mcp-oauth-not-configured',\n 'assistant-file-reference-invalid',\n 'assistant-file-upload-invalid',\n 'assistant-file-too-many-pages',\n 'assistant-file-count-limit',\n 'assistant-file-token-limit'\n ],\n 401: [\n 'assistant-webhook-signature-invalid'\n ],\n 403: [\n 'assistant-agent-forbidden',\n 'assistant-context-unavailable',\n 'assistant-owner-required',\n 'assistant-approval-forbidden',\n 'assistant-question-forbidden',\n 'assistant-turn-forbidden',\n 'assistant-subject-access-denied',\n 'assistant-approval-policy-denied',\n 'assistant-four-eyes-required',\n 'assistant-forbidden',\n 'assistant-mcp-credential-mismatch',\n 'assistant-mcp-initiator-only',\n 'assistant-file-forbidden'\n ],\n 404: [\n 'assistant-disabled',\n 'assistant-conversation-not-found',\n 'assistant-agent-not-found',\n 'assistant-metadata-entry-not-found',\n 'assistant-instructions-asset-not-found',\n 'assistant-approval-not-found',\n 'assistant-question-not-found',\n 'assistant-share-link-invalid',\n 'assistant-participant-not-found',\n 'assistant-directory-unavailable',\n 'assistant-push-unavailable',\n 'assistant-subject-not-found',\n 'assistant-subject-type-unknown',\n 'assistant-skill-not-found',\n 'assistant-account-search-unavailable',\n 'assistant-subject-search-unavailable',\n 'assistant-skill-candidate-not-found',\n 'assistant-run-not-found',\n 'assistant-board-not-found',\n 'assistant-artifact-not-found',\n 'assistant-trigger-not-found',\n 'assistant-consultation-not-found',\n 'assistant-handoff-not-found',\n 'assistant-package-not-linked',\n 'assistant-not-found',\n 'assistant-context-not-found',\n 'assistant-mcp-server-not-found',\n 'assistant-mcp-tool-not-found',\n 'assistant-files-unavailable',\n 'assistant-file-not-found'\n ],\n 409: [\n 'assistant-conversation-busy',\n 'assistant-message-duplicate',\n 'assistant-approval-not-pending',\n 'assistant-proposal-hash-mismatch',\n 'assistant-participant-limit-reached',\n 'assistant-no-accountable-owner',\n 'assistant-agent-disabled',\n 'assistant-agent-stopped',\n 'assistant-agent-configured-off',\n 'assistant-agent-paused',\n 'assistant-skill-stopped',\n 'assistant-skill-paused',\n 'assistant-agent-does-not-work-on',\n 'assistant-moved-to-shadow',\n 'assistant-shadow-variant',\n 'assistant-not-shadow-variant',\n 'assistant-service-account-not-used',\n 'assistant-consult-route-not-allowed',\n 'assistant-consult-proposal-refused',\n 'assistant-consult-asker-decides',\n 'assistant-consult-proposal-moved',\n 'assistant-consultation-in-code',\n 'assistant-consultations-not-allowed',\n 'assistant-handoffs-not-allowed',\n 'assistant-handoff-in-code',\n 'assistant-shadow-variants-not-allowed',\n 'assistant-skill-in-code',\n 'assistant-trigger-in-code',\n 'assistant-skill-in-use',\n 'assistant-configuration-limit',\n 'assistant-run-settings-in-code',\n 'assistant-run-settings-in-use',\n 'assistant-agent-not-configured',\n 'assistant-execution-not-uncertain',\n 'assistant-proposal-stale',\n 'assistant-memory-conflict',\n 'assistant-replay-active',\n 'assistant-feedback-not-accepted',\n 'assistant-question-not-pending',\n 'assistant-question-expired',\n 'assistant-question-cancelled',\n 'assistant-trigger-rate-limited',\n 'assistant-version-conflict',\n 'assistant-agent-exists',\n 'assistant-code-agent-not-deletable',\n 'assistant-agent-not-code',\n 'assistant-metadata-read-only',\n 'assistant-package-refused',\n 'assistant-package-locked',\n 'assistant-agent-instructions-unavailable',\n 'assistant-mcp-server-exists',\n 'assistant-mcp-headless-not-allowed',\n 'assistant-mcp-consent-required',\n 'assistant-mcp-connection-required',\n 'assistant-mcp-reauthorization-required',\n 'assistant-mcp-issuer-changed',\n 'assistant-mcp-authorization-not-confirmed',\n 'assistant-mcp-connection-not-supported',\n 'assistant-mcp-secret-unreadable',\n 'assistant-files-not-accepted'\n ],\n 413: [\n 'assistant-webhook-payload-too-large',\n 'assistant-package-too-large',\n 'assistant-file-too-large'\n ],\n 415: [\n 'assistant-file-type-not-supported',\n 'assistant-file-type-not-accepted'\n ],\n 422: [\n 'assistant-file-upload-refused',\n 'assistant-file-scan-refused'\n ],\n 429: [\n 'assistant-mcp-too-many-authorizations'\n ],\n 502: [\n 'assistant-mcp-unreachable',\n 'assistant-mcp-unauthorized',\n 'assistant-mcp-insufficient-scope',\n 'assistant-mcp-delegated-token-unavailable',\n 'assistant-mcp-discovery-failed',\n 'assistant-mcp-token-request-failed'\n ],\n 503: [\n 'assistant-proposal-check-failed',\n 'assistant-trigger-rolled-back',\n 'assistant-mcp-secret-unavailable',\n 'assistant-instructions-asset-unavailable',\n 'assistant-file-unavailable',\n 'assistant-file-upload-failed'\n ]\n};\n\nconst statuses: ReadonlyMap<string, number> = buildStatuses();\n\n/** The HTTP status the server answers a failure code with; 400 for a code the table does not name. */\nexport function mockStatusOf(code: string): number {\n return statuses.get(code) ?? 400;\n}\n\n/** Every code the table names, with its status (internal, for the library's own tests). */\nexport function mockStatusTable(): ReadonlyMap<string, number> {\n return statuses;\n}\n\nfunction buildStatuses(): ReadonlyMap<string, number> {\n const result = new Map<string, number>();\n for (const [status, codes] of Object.entries(statusTable)) {\n for (const code of codes) {\n // A code listed twice would have two statuses, which the server's table refuses at startup.\n if (result.has(code)) {\n throw new Error(`The mock status table lists '${code}' twice.`);\n }\n result.set(code, Number(status));\n }\n }\n return result;\n}\n","import { mockStatusOf } from './nh-assistant-mock-status';\n\n/** A mock response: status plus optional JSON body. */\nexport interface NhAssistantMockResult {\n status: number;\n body?: unknown;\n /** A body written as text instead of `body`, such as a download. */\n text?: string;\n /** Response headers next to the content type. */\n headers?: Record<string, string>;\n}\n\n/** Ids of agents and MCP servers. */\nexport const mockDashCase = /^[a-z0-9]+(?:-[a-z0-9]+)*$/;\n\n/** The longest instructions of an agent or the application context. */\nexport const mockMaxInstructions = 20_000;\n\n/** The longest reason of a state or shadow change. */\nexport const mockMaxStateReason = 500;\n\n/**\n * A contract error response: `{ code, messageKey, errors? }`, never free text, with the one status the\n * server's table gives the code (`mockStatusOf`). Field errors may come with any code.\n */\nexport function mockFailure(code: string, errors?: Record<string, string[]>): NhAssistantMockResult {\n return {\n status: mockStatusOf(code),\n body: { code, messageKey: `nh-assistant.errors.${code}`, ...(errors && Object.keys(errors).length > 0 ? { errors } : {}) }\n };\n}\n\nexport function mockValidationFailure(field?: string): NhAssistantMockResult {\n return mockFailure('assistant-validation', field ? { [field]: ['invalid'] } : undefined);\n}\n\n/**\n * Copies the stored state of a mock area: the returned function puts every map back as it was, so\n * an agent package import that one part refuses leaves nothing behind, as the server's one\n * transaction does, and a preview tries the import without keeping it.\n */\nexport function mockSnapshot(...maps: Map<unknown, unknown>[]): () => void {\n const copies = maps.map(map => structuredClone(map));\n return () => {\n maps.forEach((map, index) => {\n map.clear();\n for (const [key, value] of copies[index]) {\n map.set(key, value);\n }\n });\n };\n}\n\n/** A stable, non-cryptographic fingerprint; the mock only needs change detection. */\n/**\n * The warnings of an agent or skill that classifies its model calls with `classification` on\n * `profile`: `classification-not-permitted` when the scenario lists what the profile and its\n * fallbacks permit and that does not include it, as the server reports it; none without a\n * classification of its own.\n */\nexport function mockClassificationWarnings(\n permitted: Record<string, readonly string[]> | undefined,\n profile: string | null | undefined,\n classification: string | null | undefined\n): string[] {\n const allowed = profile ? permitted?.[profile] : undefined;\n return classification && allowed && !allowed.includes(classification) ? ['classification-not-permitted'] : [];\n}\n\nexport function mockHashText(text: string): string {\n let hash = 0x811c9dc5;\n for (let index = 0; index < text.length; index++) {\n hash ^= text.charCodeAt(index);\n hash = Math.imul(hash, 0x01000193) >>> 0;\n }\n return `fnv1a:${hash.toString(16).padStart(8, '0')}`;\n}\n","import { AssistantAccount } from '@newheap/platform-ai-chat';\nimport { NhAssistantMockAdminScenario } from './nh-assistant-mock.models';\nimport { NhAssistantMockResult, mockFailure as failure } from './nh-assistant-mock-admin-shared';\n\n/** The most distinct account ids one `GET admin/accounts?ids=` reads, and the longest id. */\nconst maxAccountIds = 50;\nconst maxAccountIdLength = 256;\n\n/**\n * The accounts of the mock administration: the scenario's `accounts`, searched by name or e-mail\n * address for technical accounts. Without accounts the search is unavailable unless the run\n * catalog says otherwise, and every account id that does not start with `unknown` is accepted.\n */\nexport class NhAssistantMockAccounts {\n private readonly accounts: AssistantAccount[];\n\n /** Whether the application searches its accounts, as the run catalog reports it. */\n readonly searchable: boolean;\n\n constructor(scenario: NhAssistantMockAdminScenario) {\n this.accounts = scenario.accounts ?? [];\n this.searchable = scenario.runCatalog?.accountSearch ?? this.accounts.length > 0;\n }\n\n /** Whether the server would refuse the account as a technical account: unknown to the application. */\n rejects(actorId: string): boolean {\n return actorId.startsWith('unknown')\n || (this.accounts.length > 0 && !this.accounts.some(account => account.actorId === actorId));\n }\n\n /**\n * `GET admin/accounts`: with `query` the scenario's accounts whose name or e-mail address contains\n * it, with `ids` (at most 50 distinct ids of at most 256 characters, as on the server) the known\n * accounts among them; without accounts the search is unavailable.\n */\n search(method: string, query: URLSearchParams): NhAssistantMockResult {\n if (method !== 'GET') {\n return { status: 405 };\n }\n const ids = query.get('ids');\n if (ids) {\n const wanted = new Set(ids.split(',').map(id => id.trim()).filter(id => id.length > 0));\n if (wanted.size > maxAccountIds || [...wanted].some(id => id.length > maxAccountIdLength)) {\n return failure('assistant-validation', { ids: ['invalid'] });\n }\n return { status: 200, body: this.accounts.filter(account => wanted.has(account.actorId)) };\n }\n const text = (query.get('query') ?? '').trim().toLocaleLowerCase();\n if (text.length < 2 || text.length > 100) {\n return failure('assistant-validation', { query: ['invalid'] });\n }\n if (!this.searchable) {\n return failure('assistant-account-search-unavailable');\n }\n const limit = Math.min(Math.max(Number(query.get('limit') ?? 20) || 20, 1), 50);\n return {\n status: 200,\n body: this.accounts\n .filter(account => account.displayName.toLocaleLowerCase().includes(text)\n || (account.detail ?? '').toLocaleLowerCase().includes(text))\n .slice(0, limit)\n };\n }\n}\n","import { AdminAgent, AdminAgentInput } from '@newheap/platform-ai-chat';\n\n/** What an agent works on, as the administration DTO carries it. */\nexport type MockWorksOn = Required<Pick<AdminAgent,\n 'worksOnSubjectTypes' | 'worksOnAllSubjects' | 'worksOnApplication' | 'perDivision' | 'runPolicy' | 'viewPolicy' | 'worksOnDeclared'>>;\n\n/** The platform's type of the whole application. */\nexport const mockSystemSubjectType = 'nh-system';\n\nconst subjectTypePattern = /^[a-z][a-z0-9]*(-[a-z0-9]+)*$/;\nconst maxSubjectTypes = 20;\nconst worksOnFields = ['worksOnSubjectTypes', 'worksOnAllSubjects', 'worksOnApplication', 'perDivision', 'runPolicy', 'viewPolicy'] as const;\n\n/** An agent that does not say what it works on: every object type, not the application, app-wide. */\nexport const mockUndeclaredWorksOn: MockWorksOn = {\n worksOnSubjectTypes: [],\n worksOnAllSubjects: true,\n worksOnApplication: false,\n perDivision: false,\n runPolicy: null,\n viewPolicy: null,\n worksOnDeclared: false\n};\n\n/**\n * What an administrator says an agent works on, as the server reads it, or `null` when the input\n * says nothing: the six fields travel together, the omitted ones read as not chosen, and without\n * types, all objects or the application the agent works on all object types.\n */\nexport function mockWorksOnFromInput(input: AdminAgentInput): MockWorksOn | null {\n if (worksOnFields.every(field => input[field] === undefined || input[field] === null)) {\n return null;\n }\n\n const nothingChosen = input.worksOnSubjectTypes == null && input.worksOnAllSubjects == null && input.worksOnApplication == null;\n return {\n worksOnSubjectTypes: [...new Set((input.worksOnSubjectTypes ?? []).map(type => type.trim()))].sort(),\n worksOnAllSubjects: nothingChosen || input.worksOnAllSubjects === true,\n worksOnApplication: input.worksOnApplication === true,\n perDivision: input.perDivision === true,\n runPolicy: input.runPolicy?.trim() || null,\n viewPolicy: input.viewPolicy?.trim() || null,\n worksOnDeclared: true\n };\n}\n\n/**\n * The field errors of what an agent works on, with the server's rules: something chosen, not types\n * next to all objects, at most 20 registered application types, per division only when the\n * application lists divisions, and policies from those the application lists.\n */\nexport function mockWorksOnErrors(\n worksOn: MockWorksOn,\n knownTypes: readonly string[],\n agentPolicies: readonly string[],\n divisions: boolean\n): Record<string, string[]> {\n const errors: Record<string, string[]> = {};\n const add = (field: string, code: string): void => {\n errors[field] = [...new Set([...(errors[field] ?? []), code])];\n };\n const types = worksOn.worksOnSubjectTypes;\n if (types.length === 0 && !worksOn.worksOnAllSubjects && !worksOn.worksOnApplication) {\n add('worksOn', 'required');\n }\n if (worksOn.worksOnAllSubjects && types.length > 0) {\n add('worksOn', 'invalid');\n }\n if (types.length > maxSubjectTypes) {\n add('worksOnSubjectTypes', 'too-long');\n }\n if (types.some(type => !subjectTypePattern.test(type))) {\n add('worksOnSubjectTypes', 'invalid');\n }\n if (types.some(type => subjectTypePattern.test(type) && (type.startsWith('nh-') || !knownTypes.includes(type)))) {\n add('worksOnSubjectTypes', 'not-found');\n }\n if (worksOn.perDivision && !divisions) {\n add('perDivision', 'invalid');\n }\n if (worksOn.runPolicy !== null && !agentPolicies.includes(worksOn.runPolicy)) {\n add('runPolicy', 'not-found');\n }\n if (worksOn.viewPolicy !== null && !agentPolicies.includes(worksOn.viewPolicy)) {\n add('viewPolicy', 'not-found');\n }\n return errors;\n}\n\n/** Whether an agent works on subjects of the type, as the server's rule decides it. */\nexport function mockWorksOnCovers(agent: Partial<MockWorksOn>, subjectType: string): boolean {\n if (subjectType === mockSystemSubjectType) {\n return agent.worksOnApplication === true;\n }\n if (subjectType.startsWith('nh-')) {\n return false;\n }\n return agent.worksOnAllSubjects !== false || (agent.worksOnSubjectTypes ?? []).includes(subjectType);\n}\n","import {\n AdminAgent,\n AdminAgentInput,\n AgentConsultationRoutesState,\n AgentReplay,\n AgentShadowState,\n AgentSkillState,\n AgentState,\n AgentSummary,\n AssistantAutonomy,\n AssistantDataClassification,\n InstructionAssetProblem,\n InstructionAssetReference,\n NhAssistantConsultationRoute\n} from '@newheap/platform-ai-chat';\nimport { NhAssistantMockAdminAgent, NhAssistantMockScenario } from './nh-assistant-mock.models';\nimport { NhAssistantMockInstructionAssets } from './nh-assistant-mock-instruction-assets';\nimport {\n NhAssistantMockResult,\n mockClassificationWarnings,\n mockDashCase,\n mockFailure as failure,\n mockHashText as hashText,\n mockMaxInstructions as maxInstructions,\n mockMaxStateReason as maxStateReason,\n mockSnapshot,\n mockValidationFailure as validationFailure\n} from './nh-assistant-mock-admin-shared';\nimport { mockUndeclaredWorksOn, mockWorksOnErrors, mockWorksOnFromInput } from './nh-assistant-mock-works-on';\n\ninterface StoredAgent {\n agent: AdminAgent;\n /** The definition in code, for `reset`; null for admin agents. */\n codeDefinition: AdminAgentInput | null;\n /** The routes of the agent's consultations and the switches administrators set. */\n consultations: StoredConsultationRoutes;\n}\n\n/** The routes code allows for an agent's consultations and the switches administrators set. */\ninterface StoredConsultationRoutes {\n /**\n * The subject types whose consultation in code allows each route; `null` for an agent without\n * consultations in code.\n */\n allowed: Partial<Record<NhAssistantConsultationRoute, string[]>> | null;\n /** The switch per route: `true` on, `false` off; a missing route follows the code. */\n overrides: Partial<Record<NhAssistantConsultationRoute, boolean>>;\n changedAt: string | null;\n changedBy: string | null;\n reason: string | null;\n}\n\n/** The routes in the order the server lists them, with the field of the request that switches each. */\nconst consultationRoutes: readonly [NhAssistantConsultationRoute, 'askerDecides' | 'subjectAgentRights' | 'subjectAskerRights'][] = [\n ['asker-decides', 'askerDecides'],\n ['subject-agent-rights', 'subjectAgentRights'],\n ['subject-asker-rights', 'subjectAskerRights']\n];\n\n/** What the agents read of the other areas of the mock administration. */\nexport interface NhAssistantMockAgentRules {\n /** Whether an MCP server with this id exists, for `mcpServerIds`. */\n hasServer(serverId: string): boolean;\n /** The policies administrators may choose as run and view policies, by name. */\n agentPolicyNames(): string[];\n /** Whether the scenario lists divisions, so an agent may work per division. */\n divisionsListed(): boolean;\n /** The profiles the run catalog offers, which an agent created here may choose. */\n profileNames(): string[];\n /**\n * The agent's consultations defined as data that are in effect, each with the routes in effect: they\n * count for its route switches as consultations in code do.\n */\n dataConsultations(agentId: string): { subjectType: string; routes: NhAssistantConsultationRoute[] }[];\n /**\n * Why a new agent may not be a data shadow variant of its `shadowOf` (`UseShadowVariantsAsData`), or\n * `null`; without it the mock creates no data variants.\n */\n shadowVariantRefusal?(input: AdminAgentInput): NhAssistantMockResult | null;\n /** The application's text assets, which an agent created here may take its instructions from. */\n instructionAssets?(): NhAssistantMockInstructionAssets;\n}\n\n/** The profile of an agent that did not choose one, as the application's chat profile. */\nconst mockChatProfile = 'chat';\n\nconst autonomyLevels: AssistantAutonomy[] = ['observe', 'explain', 'propose', 'simulate', 'execute'];\nconst dataClassifications: AssistantDataClassification[] = ['public', 'internal', 'confidential', 'restricted'];\n\n/**\n * The agents of the mock administration: agents in code and agents created as data, their state,\n * shadow modes, technical accounts, feedback, evaluation and replays. The mock runs no agents on\n * their own, so reports and replays are empty.\n */\nexport class NhAssistantMockAdminAgents {\n private readonly agents = new Map<string, StoredAgent>();\n private readonly replays = new Map<string, AgentReplay[]>();\n\n constructor(\n private readonly scenario: NhAssistantMockScenario,\n private readonly now: () => string,\n private readonly rules: NhAssistantMockAgentRules\n ) {\n const admin = scenario.admin ?? {};\n const agents: NhAssistantMockAdminAgent[] = admin.agents\n ?? scenario.agents.map(agent => ({ ...codeAgentFromSummary(agent), source: 'code' as const }));\n // How an agent runs, in code or as data, belongs to its run configuration, not to the agent.\n for (const {\n source, skills, shadowOf, shadow, serviceAccount, worksOnDeclared, knownSubjectTypes, consultations, consultationDescriptions,\n codeRunSettings: _, runConfiguration: __, consultableAsData: ___, dataConsultations: ____, consultationTools: _____, codeHandOffs: ______, ...input\n } of agents) {\n const variant = typeof shadowOf === 'string';\n const agentShadow = variant || shadow === true;\n const initial = this.toAgent(input, source, 1, false);\n this.agents.set(input.id, {\n agent: {\n ...initial,\n // Code says what its agents work on; a scenario agent that says nothing works on all objects.\n ...(source === 'code' ? { ...(mockWorksOnFromInput(input) ?? mockUndeclaredWorksOn), worksOnDeclared: worksOnDeclared ?? mockWorksOnFromInput(input) !== null } : {}),\n knownSubjectTypes: knownSubjectTypes ?? [],\n shadowOf: shadowOf ?? null,\n shadow: shadowState(agentShadow, variant || shadow === true, null, variant),\n serviceAccount: serviceAccount === undefined\n ? null\n : { actorId: serviceAccount, configuredActorId: serviceAccount, overridden: false, changedAt: null, changedBy: null, reason: null },\n skills: (skills ?? []).map((skill): AgentSkillState => ({\n skillId: skill.skillId,\n description: skill.description,\n runState: skill.startsOff === true ? 'off' as const : 'active' as const,\n changedAt: null,\n changedBy: null,\n reason: null,\n waitingInputs: 0,\n toolCallsToday: 0,\n tokensToday: 0,\n dailyToolCalls: null,\n dailyTokens: null,\n cancelledRuns: 0,\n startedRuns: 0,\n shadow: shadowState(agentShadow || skill.shadow === true, skill.shadow === true, null, variant)\n }))\n },\n codeDefinition: source === 'code' ? structuredClone(input) : null,\n // Consultations in code belong to agents in code; every agent may get consultations as data.\n consultations: noSwitches(source === 'code' && (consultations !== undefined || consultationDescriptions !== undefined)\n ? structuredClone(consultations ?? {})\n : null)\n });\n }\n }\n\n find(agentId: string): AdminAgent | undefined {\n return this.agents.get(agentId)?.agent;\n }\n\n /**\n * A copy of the agents and their replays; the returned function puts it back, for an import of an\n * agent package that fails as a whole and for its preview.\n */\n snapshot(): () => void {\n return mockSnapshot(this.agents, this.replays);\n }\n\n /** The definition in code of an agent in code, as `reset` restores it; `null` for an agent created here. */\n codeDefinition(agentId: string): AdminAgentInput | null {\n const definition = this.agents.get(agentId)?.codeDefinition;\n return definition ? structuredClone(definition) : null;\n }\n\n has(agentId: string): boolean {\n return this.agents.has(agentId);\n }\n\n /** Every agent, in the order they were added. */\n all(): AdminAgent[] {\n return [...this.agents.values()].map(stored => stored.agent);\n }\n\n /**\n * Makes the next version of an agent, as a change of the metadata of an agent created here does on\n * the server; nothing else of the agent changes.\n */\n nextVersion(agentId: string): AdminAgent {\n const stored = this.agents.get(agentId);\n if (!stored) {\n throw new Error(`The mock has no agent '${agentId}'.`);\n }\n stored.agent = { ...stored.agent, version: stored.agent.version + 1, updatedAt: this.now() };\n return stored.agent;\n }\n\n /**\n * Copies a data shadow variant's definition onto its live agent as the live agent's next version,\n * as a promotion does on the server before it deletes the variant: the live agent keeps its name,\n * MCP servers, state and shadow mode; an agent in code takes only the fields it can override, an\n * agent created here also the variant's profile, classification, what it works on and its asset.\n */\n promote(variantId: string, liveId: string): AdminAgent {\n const variant = this.agents.get(variantId);\n const live = this.agents.get(liveId);\n if (!variant || !live) {\n throw new Error(`The mock has no agent '${variant ? liveId : variantId}'.`);\n }\n\n const from = variant.agent;\n const runtime = live.agent.source === 'admin';\n const definition: AdminAgentInput = {\n id: live.agent.id,\n displayName: live.agent.displayName,\n description: from.description,\n instructions: runtime && from.instructionsAsset ? '' : from.instructions,\n toolSelectors: [...from.toolSelectors],\n mcpServerIds: [...live.agent.mcpServerIds],\n requiredPolicy: from.requiredPolicy,\n autonomy: from.autonomy,\n ...(runtime\n ? {\n ...pickWorksOn(from),\n profile: from.profile,\n dataClassification: from.dataClassification ?? null,\n instructionsAsset: from.instructionsAsset ?? null\n }\n : {})\n };\n live.agent = this.toAgent(definition, live.agent.source, live.agent.version + 1, live.agent.source === 'code', live.agent);\n return live.agent;\n }\n\n /** Removes a deleted MCP server from the agents it was assigned to. */\n removeServer(serverId: string): void {\n for (const agent of this.agents.values()) {\n agent.agent = { ...agent.agent, mcpServerIds: agent.agent.mcpServerIds.filter(id => id !== serverId) };\n }\n }\n\n /** Chat agents: code agents keep their keys, admin agents carry literal text; stopped agents are left out. */\n chatAgents(): AgentSummary[] {\n const result: AgentSummary[] = [];\n for (const { agent } of this.agents.values()) {\n // An agent kept out of the chat still works on its own.\n if (agent.runState === 'stopped' || agent.runState === 'configured-off' || agent.offeredInChat === false) {\n continue;\n }\n\n const summary = this.scenario.agents.find(item => item.id === agent.id);\n result.push(summary && agent.source === 'code'\n ? { ...summary, version: agent.version }\n : {\n id: agent.id,\n version: agent.version,\n displayNameKey: agent.displayName,\n descriptionKey: agent.description,\n canMutate: agent.autonomy === 'execute'\n });\n }\n return result;\n }\n\n /**\n * `admin/agents`, `admin/agents/{id}` and their `reset`, `state`, `shadow`, `service-account`,\n * `consultation-routes` and `kill-switch`.\n */\n agentsEndpoint(method: string, id: string | undefined, action: string | undefined, body: unknown, length: number): NhAssistantMockResult {\n if (id === undefined) {\n if (method === 'GET') {\n return { status: 200, body: [...this.agents.values()].map(stored => this.withInstructions(stored.agent)) };\n }\n if (method !== 'POST') {\n return { status: 405 };\n }\n\n const input = body as AdminAgentInput;\n const invalid = this.agentFailure(input, 'admin');\n if (invalid) {\n return invalid;\n }\n if (this.agents.has(input.id)) {\n return failure('assistant-agent-exists');\n }\n const shadowOf = typeof input.shadowOf === 'string' && input.shadowOf.trim().length > 0 ? input.shadowOf.trim() : null;\n // Without the application's ceiling the mock creates no data variants, as the server refuses them.\n const refused = shadowOf === null\n ? null\n : this.rules.shadowVariantRefusal\n ? this.rules.shadowVariantRefusal({ ...input, shadowOf })\n : failure('assistant-shadow-variants-not-allowed');\n if (refused) {\n return refused;\n }\n\n const created = this.toAgent(input, 'admin', 1, false);\n // A data shadow variant always works in shadow and is never offered in the chat.\n const agent: AdminAgent = shadowOf === null\n ? created\n : { ...created, shadowOf, offeredInChat: false, shadow: shadowState(true, false, null, true) };\n this.agents.set(agent.id, { agent, codeDefinition: null, consultations: noSwitches(null) });\n return { status: 201, body: agent };\n }\n\n const stored = this.agents.get(id);\n if (!stored) {\n return failure('assistant-not-found');\n }\n\n if (length === 4 && action === 'reset' && method === 'POST') {\n if (!stored.codeDefinition) {\n return failure('assistant-agent-not-code');\n }\n stored.agent = this.toAgent(stored.codeDefinition, 'code', stored.agent.version + 1, false, stored.agent);\n return { status: 200, body: stored.agent };\n }\n if (length === 4 && action === 'state') {\n return this.agentStateEndpoint(stored, method, body);\n }\n if (length === 4 && action === 'shadow' && method === 'POST') {\n return this.agentShadowEndpoint(stored, body);\n }\n if (length === 4 && action === 'service-account' && method === 'POST') {\n return this.serviceAccountEndpoint(stored, body);\n }\n if (length === 4 && action === 'consultation-routes' && method === 'POST') {\n return this.consultationRoutesEndpoint(stored, body);\n }\n if (length === 4 && action === 'kill-switch' && method === 'POST') {\n const engaged = (body as { engaged?: unknown } | undefined)?.engaged;\n if (typeof engaged !== 'boolean') {\n return validationFailure();\n }\n // Releasing never switches on an agent that was off, as on the server: one that was off when\n // it stopped goes back off, and one that is off stays off.\n const released = stored.agent.runState === 'off' || stored.agent.offBeforeStop === true ? 'off' : 'active';\n const changed = this.agentStateEndpoint(stored, 'POST', { state: engaged ? 'stopped' : released });\n return changed.status === 200\n ? {\n status: 200,\n body: { agentId: id, enabled: stored.agent.runState !== 'stopped', cancelledRuns: 0, runState: stored.agent.runState }\n }\n : changed;\n }\n if (length !== 3) {\n return failure('assistant-not-found');\n }\n\n if (method === 'PUT') {\n const input = body as AdminAgentInput & { expectedVersion?: number };\n const invalid = input?.id !== id ? validationFailure() : this.agentFailure(input, stored.agent.source);\n if (invalid) {\n return invalid;\n }\n if (input.expectedVersion !== stored.agent.version) {\n return failure('assistant-version-conflict');\n }\n\n const { expectedVersion, ...definition } = input;\n const updated = this.toAgent(definition, stored.agent.source, stored.agent.version + 1, stored.agent.source === 'code', stored.agent);\n // A data shadow variant keeps its live agent and stays out of the chat.\n stored.agent = stored.agent.source === 'admin' && stored.agent.shadowOf ? { ...updated, offeredInChat: false } : updated;\n return { status: 200, body: stored.agent };\n }\n if (method === 'DELETE') {\n if (stored.agent.source === 'code') {\n return failure('assistant-code-agent-not-deletable');\n }\n this.agents.delete(id);\n return { status: 204 };\n }\n\n return { status: 405 };\n }\n\n /**\n * `POST admin/agents/{id}/skills/{skillId}/state`: the skill's state, next to the agent's.\n */\n skillStateEndpoint(method: string, agentId: string, skillId: string, body: unknown): NhAssistantMockResult {\n const stored = this.agents.get(agentId);\n const skill = stored?.agent.skills?.find(item => item.skillId === skillId);\n if (!stored || !skill) {\n return failure('assistant-skill-not-found');\n }\n if (method !== 'POST') {\n return { status: 405 };\n }\n\n const request = body as { state?: unknown; reason?: unknown } | undefined;\n if (request?.state !== 'active' && request?.state !== 'paused' && request?.state !== 'stopped' && request?.state !== 'off') {\n return validationFailure();\n }\n const reason = typeof request.reason === 'string' && request.reason.trim().length > 0 ? request.reason.trim() : null;\n const changed: AgentSkillState = skill.runState === request.state\n ? skill\n : { ...skill, runState: request.state, changedAt: this.now(), changedBy: 'current-user', reason };\n stored.agent = { ...stored.agent, skills: stored.agent.skills!.map(item => item.skillId === skillId ? changed : item) };\n return { status: 200, body: changed };\n }\n\n /**\n * `POST admin/agents/{id}/skills/{skillId}/shadow`: one skill's shadow mode; a skill of an agent\n * in shadow works in shadow whatever its own mode.\n */\n skillShadowEndpoint(method: string, agentId: string, skillId: string, body: unknown): NhAssistantMockResult {\n const stored = this.agents.get(agentId);\n const skill = stored?.agent.skills?.find(item => item.skillId === skillId);\n if (!stored || !skill) {\n return failure('assistant-skill-not-found');\n }\n if (method !== 'POST') {\n return { status: 405 };\n }\n const request = shadowRequest(body);\n if (request === null) {\n return validationFailure();\n }\n const agentShadow = stored.agent.shadow ?? shadowState(false, false, null, false);\n if (agentShadow.locked) {\n return failure('assistant-shadow-variant');\n }\n\n const current = skill.shadow ?? shadowState(agentShadow.shadow, false, null, false);\n const override = request.mode === 'code' ? null : request.mode === 'shadow';\n const changed: AgentSkillState = current.override === override\n ? skill\n : {\n ...skill,\n shadow: {\n ...current,\n shadow: agentShadow.shadow || (override ?? current.configured),\n override,\n changedAt: this.now(),\n changedBy: 'current-user',\n reason: request.reason\n }\n };\n stored.agent = { ...stored.agent, skills: stored.agent.skills!.map(item => item.skillId === skillId ? changed : item) };\n return { status: 200, body: changed };\n }\n\n /**\n * The feedback report of an agent. The mock runs no agents on their own and records no proposals,\n * so the summary, the list and the JSON Lines export are empty.\n */\n agentFeedback(method: string, agentId: string, child: string | undefined, length: number): NhAssistantMockResult {\n if (!this.agents.has(agentId)) {\n return failure('assistant-agent-not-found');\n }\n if (method !== 'GET') {\n return { status: 405 };\n }\n\n if (length === 4) {\n return { status: 200, body: { items: [], total: 0 } };\n }\n if (length === 5 && child === 'summary') {\n const to = Date.parse(this.now());\n const from = to - 30 * 24 * 60 * 60 * 1000;\n return { status: 200, body: { agentId, from: new Date(from).toISOString(), to: new Date(to).toISOString(), rows: [] } };\n }\n if (length === 5 && child === 'export') {\n return { status: 200 };\n }\n\n return failure('assistant-not-found');\n }\n\n /**\n * The comparison of a shadow variant with its live agent. The mock runs no agents on their own,\n * so it pairs no runs and the export is empty.\n */\n agentEvaluation(method: string, agentId: string, child: string | undefined, length: number, query: URLSearchParams): NhAssistantMockResult {\n if (!this.agents.has(agentId)) {\n return failure('assistant-agent-not-found');\n }\n if (method !== 'GET') {\n return { status: 405 };\n }\n\n const variantId = query.get('variant') ?? '';\n if (this.agents.get(variantId)?.agent.shadowOf !== agentId) {\n return failure('assistant-evaluation-not-variant');\n }\n if (length === 5 && child === 'export') {\n return { status: 200 };\n }\n if (length !== 4) {\n return failure('assistant-not-found');\n }\n\n const to = query.get('to') ?? this.now();\n const from = query.get('from') ?? new Date(Date.parse(to) - 7 * 24 * 60 * 60 * 1000).toISOString();\n const noCost = {\n runs: 0, modelCalls: 0, tokens: 0, toolCalls: 0,\n averageModelCalls: 0, averageTokens: 0, averageToolCalls: 0,\n p95ModelCalls: 0, p95Tokens: 0, p95ToolCalls: 0\n };\n return {\n status: 200,\n body: {\n agentId,\n variantId,\n from,\n to,\n runs: { live: 0, variant: 0, paired: 0, replayed: 0, liveUnpaired: 0, variantUnpaired: 0, truncated: false },\n tools: [],\n liveCost: noCost,\n variantCost: noCost,\n routing: [],\n differences: []\n }\n };\n }\n\n /**\n * Replays into a shadow variant. The mock records no runs, so a replay completes at once\n * without replaying any.\n */\n agentReplay(method: string, agentId: string, action: string, body: unknown): NhAssistantMockResult {\n const stored = this.agents.get(agentId);\n if (!stored) {\n return failure('assistant-agent-not-found');\n }\n if (action === 'replays') {\n return method === 'GET' ? { status: 200, body: { items: [...(this.replays.get(agentId) ?? [])].reverse() } } : { status: 405 };\n }\n if (method !== 'POST') {\n return { status: 405 };\n }\n if (!stored.agent.shadowOf) {\n return failure('assistant-replay-not-shadow');\n }\n\n const request = (body ?? {}) as { sourceAgentId?: string | null; from?: string | null; to?: string | null; maxRuns?: number | null };\n const maxRuns = request.maxRuns ?? 100;\n if (maxRuns < 1 || maxRuns > 500) {\n return failure('assistant-message-invalid');\n }\n\n const now = this.now();\n const to = request.to ?? now;\n const replay = {\n id: crypto.randomUUID(),\n variantAgentId: agentId,\n sourceAgentId: request.sourceAgentId ?? stored.agent.shadowOf,\n from: request.from ?? new Date(Date.parse(to) - 7 * 24 * 60 * 60 * 1000).toISOString(),\n to,\n maxRuns,\n status: 'completed' as const,\n stopReason: null,\n runsReplayed: 0,\n runsSkipped: 0,\n createdAt: now,\n endedAt: now\n };\n this.replays.set(agentId, [...(this.replays.get(agentId) ?? []), replay]);\n return { status: 202, body: replay };\n }\n\n /**\n * A skill defined as data shows among the agent's skills as a skill in shadow by default, as the\n * server shows it, and off when it was added with `startsOff`; removing it takes its state along.\n */\n setDataSkill(agentId: string, skillId: string, description: string | null, startsOff = false): void {\n const stored = this.agents.get(agentId);\n if (!stored) {\n return;\n }\n const others = (stored.agent.skills ?? []).filter(skill => skill.skillId !== skillId);\n const existing = (stored.agent.skills ?? []).find(skill => skill.skillId === skillId);\n stored.agent = {\n ...stored.agent,\n skills: description === null\n ? others\n : [...others, existing ? { ...existing, description } : {\n skillId,\n description,\n runState: startsOff ? 'off' : 'active',\n changedAt: startsOff ? this.now() : null,\n changedBy: startsOff ? 'current-user' : null,\n reason: null,\n waitingInputs: 0,\n toolCallsToday: 0,\n tokensToday: 0,\n dailyToolCalls: null,\n dailyTokens: null,\n cancelledRuns: 0,\n startedRuns: 0,\n shadow: shadowState(true, true, null, stored.agent.shadow?.locked ?? false)\n }]\n };\n }\n\n /**\n * `POST admin/agents/{id}/shadow`: the agent's shadow mode as an override of the code. A\n * variant always works in shadow; the skills' effective modes follow the agent's.\n */\n private agentShadowEndpoint(stored: StoredAgent, body: unknown): NhAssistantMockResult {\n const request = shadowRequest(body);\n if (request === null) {\n return validationFailure();\n }\n const current = stored.agent.shadow ?? shadowState(false, false, null, false);\n if (current.locked) {\n return failure('assistant-shadow-variant');\n }\n\n const override = request.mode === 'code' ? null : request.mode === 'shadow';\n if (current.override !== override) {\n const shadow = override ?? current.configured;\n stored.agent = {\n ...stored.agent,\n shadow: { ...current, shadow, override, changedAt: this.now(), changedBy: 'current-user', reason: request.reason },\n skills: (stored.agent.skills ?? []).map(skill => ({ ...skill, shadow: withAgentShadow(skill.shadow, shadow) }))\n };\n }\n return { status: 200, body: this.toAgentState(stored) };\n }\n\n /**\n * `POST admin/agents/{id}/service-account`: the technical account of an agent that answers to\n * one in code. The mock accepts every account id except those starting with `unknown`.\n */\n private serviceAccountEndpoint(stored: StoredAgent, body: unknown): NhAssistantMockResult {\n const current = stored.agent.serviceAccount;\n if (!current) {\n return failure('assistant-service-account-not-used');\n }\n const request = body as { actorId?: unknown; reason?: unknown } | undefined;\n if (request === undefined || (request.actorId !== null && request.actorId !== undefined && typeof request.actorId !== 'string')) {\n return validationFailure();\n }\n const actorId = typeof request.actorId === 'string' && request.actorId.trim().length > 0 ? request.actorId.trim() : null;\n if (actorId !== null && (actorId.length > 256 || actorId.startsWith('unknown'))) {\n return actorId.length > 256 ? validationFailure() : failure('assistant-service-account-not-found');\n }\n const reason = typeof request.reason === 'string' && request.reason.trim().length > 0 ? request.reason.trim() : null;\n if (reason !== null && reason.length > maxStateReason) {\n return validationFailure();\n }\n\n const overridden = actorId !== null;\n if ((current.overridden ? current.actorId : null) !== actorId) {\n stored.agent = {\n ...stored.agent,\n serviceAccount: {\n ...current,\n actorId: actorId ?? current.configuredActorId,\n overridden,\n changedAt: this.now(),\n changedBy: 'current-user',\n reason\n }\n };\n }\n return { status: 200, body: this.toAgentState(stored) };\n }\n\n /**\n * `POST admin/agents/{id}/consultation-routes`: each route on, off or back to what the consultations\n * allow; a route left out keeps its switch. The consultations in code and as data in effect are the\n * ceiling, as on the server: switching on a route that none of them allows, or switching an agent\n * nobody can consult, answers `409 assistant-consult-route-not-allowed`.\n */\n private consultationRoutesEndpoint(stored: StoredAgent, body: unknown): NhAssistantMockResult {\n const request = body as Record<string, unknown> | undefined;\n if (!request || typeof request !== 'object') {\n return validationFailure();\n }\n for (const [, field] of consultationRoutes) {\n const value = request[field];\n if (value !== undefined && value !== null && value !== 'on' && value !== 'off' && value !== 'code') {\n return validationFailure(field);\n }\n }\n const reason = typeof request['reason'] === 'string' && request['reason'].trim().length > 0 ? request['reason'].trim() : null;\n if ((request['reason'] !== undefined && request['reason'] !== null && typeof request['reason'] !== 'string')\n || (reason !== null && reason.length > maxStateReason)) {\n return validationFailure('reason');\n }\n\n const current = stored.consultations;\n const allowed = this.allowedRoutes(stored);\n if (this.consultationRoutesState(stored) === null\n || !consultationRoutes.some(([route]) => (allowed[route]?.length ?? 0) > 0)\n || consultationRoutes.some(([route, field]) => request[field] === 'on' && (allowed[route]?.length ?? 0) === 0)) {\n return failure('assistant-consult-route-not-allowed');\n }\n\n const overrides = { ...current.overrides };\n for (const [route, field] of consultationRoutes) {\n const value = request[field];\n if (value === 'on' || value === 'off') {\n overrides[route] = value === 'on';\n } else if (value === 'code') {\n delete overrides[route];\n }\n }\n const changed = consultationRoutes.some(([route]) => overrides[route] !== current.overrides[route]);\n if (changed) {\n stored.consultations = { ...current, overrides, changedAt: this.now(), changedBy: 'current-user', reason };\n }\n return { status: 200, body: this.toAgentState(stored) };\n }\n\n /**\n * The subject types whose consultation allows each route: in code, and as data with the routes in\n * effect, as the server reads both from the agent's options in effect.\n */\n private allowedRoutes(stored: StoredAgent): Partial<Record<NhAssistantConsultationRoute, string[]>> {\n const allowed: Partial<Record<NhAssistantConsultationRoute, string[]>> = structuredClone(stored.consultations.allowed ?? {});\n for (const consultation of this.rules.dataConsultations(stored.agent.id)) {\n for (const route of consultation.routes) {\n allowed[route] = [...(allowed[route] ?? []), consultation.subjectType];\n }\n }\n return allowed;\n }\n\n /**\n * The routes of an agent's consultations as the server reports them; `null` for an agent nobody can\n * consult: it has no consultation in code and none as data in effect.\n */\n private consultationRoutesState(stored: StoredAgent): AgentConsultationRoutesState | null {\n const switches = stored.consultations;\n if (switches.allowed === null && this.rules.dataConsultations(stored.agent.id).length === 0) {\n return null;\n }\n\n const allowed = this.allowedRoutes(stored);\n return {\n routes: consultationRoutes.map(([route]) => {\n const types = allowed[route] ?? [];\n const override = switches.overrides[route] ?? null;\n return {\n route,\n allowed: types.length > 0,\n override,\n on: types.length > 0 && override !== false,\n subjectTypes: [...types]\n };\n }),\n changedAt: switches.changedAt,\n changedBy: switches.changedBy,\n reason: switches.reason\n };\n }\n\n /** The agent's state with the routes of its consultations. */\n private toAgentState(stored: StoredAgent): AgentState {\n return { ...toAgentState(stored), consultationRoutes: this.consultationRoutesState(stored) };\n }\n\n /**\n * `GET` and `POST admin/agents/{id}/state`. The mock runs no agents on their own, so a pause\n * collects no waiting events, a stop cancels no runs and switching an agent off or on starts\n * nothing; the version never changes.\n */\n private agentStateEndpoint(stored: StoredAgent, method: string, body: unknown): NhAssistantMockResult {\n if (method === 'GET') {\n return { status: 200, body: this.toAgentState(stored) };\n }\n if (method !== 'POST') {\n return { status: 405 };\n }\n\n const request = body as { state?: unknown; reason?: unknown } | undefined;\n if (request?.state === undefined || request.state === null) {\n return validationFailure();\n }\n if (request.state !== 'active' && request.state !== 'paused' && request.state !== 'stopped' && request.state !== 'off') {\n return validationFailure();\n }\n const reason = typeof request.reason === 'string' && request.reason.trim().length > 0 ? request.reason.trim() : null;\n if (reason !== null && reason.length > maxStateReason) {\n return validationFailure();\n }\n if (stored.agent.runState === 'configured-off') {\n return request.state === 'active'\n ? failure('assistant-agent-configured-off')\n : { status: 200, body: this.toAgentState(stored) };\n }\n if (stored.agent.runState !== request.state) {\n stored.agent = {\n ...stored.agent,\n isEnabled: request.state !== 'stopped',\n runState: request.state,\n // A stop remembers whether the agent was off, for the kill switch; every other change forgets it.\n offBeforeStop: request.state === 'stopped' && stored.agent.runState === 'off',\n stateChangedAt: this.now(),\n stateChangedBy: 'current-user',\n stateReason: reason\n };\n }\n return { status: 200, body: this.toAgentState(stored) };\n }\n\n /**\n * The contract failure for an invalid agent, or null when the agent is valid. What an agent created\n * here works on is checked as the server checks it; an agent in code takes it from its code.\n */\n private agentFailure(input: AdminAgentInput | undefined, source: 'code' | 'admin'): NhAssistantMockResult | null {\n if (typeof input?.instructions === 'string' && input.instructions.length > maxInstructions) {\n return failure('assistant-instructions-too-long');\n }\n // Only an agent created here takes its instructions from an asset, never next to inline text.\n if (input?.instructionsAsset) {\n const errors: Record<string, string[]> = {};\n if (source !== 'admin' || !this.rules.instructionAssets) {\n errors['instructionsAsset'] = ['not-allowed'];\n } else {\n this.rules.instructionAssets().check(input.instructionsAsset, errors);\n }\n if (typeof input.instructions === 'string' && input.instructions.trim().length > 0) {\n errors['instructions'] = ['not-allowed'];\n }\n if (Object.keys(errors).length > 0) {\n return failure('assistant-validation', errors);\n }\n }\n if (!this.validAgent(input)) {\n return validationFailure();\n }\n\n const worksOn = source === 'admin' ? mockWorksOnFromInput(input!) : null;\n if (worksOn) {\n const errors = mockWorksOnErrors(\n worksOn,\n (this.scenario.subjectTypes ?? []).map(type => type.id),\n this.rules.agentPolicyNames(),\n this.rules.divisionsListed());\n if (Object.keys(errors).length > 0) {\n return failure('assistant-validation', errors);\n }\n }\n // An agent created here uses a profile the run catalog offers, or keeps the one it has or the\n // chat profile it gets by default; an agent in code takes its own.\n const profile = typeof input?.profile === 'string' ? input.profile.trim() : '';\n if (source === 'admin' && profile.length > 0 && profile !== mockChatProfile\n && profile !== this.agents.get(input!.id)?.agent.profile\n && !this.rules.profileNames().includes(profile)) {\n return failure('assistant-validation', { profile: ['not-found'] });\n }\n // An agent created here names the classification of its model calls, as a data skill does.\n const classification = chosenClassification(input!.dataClassification);\n if (source === 'admin' && classification !== null && !dataClassifications.includes(classification as AssistantDataClassification)) {\n return failure('assistant-validation', { dataClassification: ['invalid'] });\n }\n return null;\n }\n\n private validAgent(input: AdminAgentInput | undefined): boolean {\n const policies = this.scenario.admin?.policies;\n return !!input &&\n typeof input.id === 'string' && input.id.length <= 60 && mockDashCase.test(input.id) &&\n typeof input.displayName === 'string' && input.displayName.trim().length > 0 &&\n typeof input.description === 'string' &&\n typeof input.instructions === 'string' && input.instructions.length <= maxInstructions &&\n Array.isArray(input.toolSelectors) && input.toolSelectors.every(selector => /^[a-z0-9*][a-z0-9.*-]*$/.test(selector)) &&\n Array.isArray(input.mcpServerIds) && input.mcpServerIds.every(serverId => this.rules.hasServer(serverId)) &&\n (input.requiredPolicy === null || (typeof input.requiredPolicy === 'string' && (!policies || policies.includes(input.requiredPolicy)))) &&\n autonomyLevels.includes(input.autonomy) &&\n (input.isEnabled === undefined || typeof input.isEnabled === 'boolean');\n }\n\n /**\n * The stored agent. `isEnabled` in the input is ignored, as by the server: the state comes from\n * `previous`, and a new agent starts active.\n */\n private toAgent(\n input: AdminAgentInput,\n source: 'code' | 'admin',\n version: number,\n isOverridden: boolean,\n previous?: AdminAgent\n ): AdminAgent {\n // Only a new agent starts off, created that way here or with StartsOff() in code.\n // Metadata is not part of the definition; its values live with the mock's agent metadata.\n const { isEnabled, startsOff, startsInShadow, profile, dataClassification, metadata, instructionsAsset, ...definition } = structuredClone(input);\n const createdOff = previous === undefined && startsOff === true;\n // Only a new agent created here starts in shadow, as an override that applies once it has run settings.\n const createdInShadow = previous === undefined && source === 'admin' && startsInShadow === true;\n // The agent shows the asset's text read-only, or none while it does not resolve.\n const reference = source === 'admin' && instructionsAsset ? instructionsAsset : null;\n const assetProblem = reference ? this.instructionsProblemOf(reference) : null;\n const chosenProfile = source === 'admin' && typeof profile === 'string' && profile.trim().length > 0 ? profile.trim() : null;\n const classification = chosenClassification(dataClassification) as AssistantDataClassification | null;\n return this.withWarnings({\n ...definition,\n // An agent created here keeps its profile when the input omits it; code decides for the others.\n profile: chosenProfile ?? previous?.profile ?? mockChatProfile,\n // The same for its classification; an agent in code keeps the one of its scenario.\n dataClassification: source === 'admin' || previous === undefined\n ? classification ?? previous?.dataClassification ?? null\n : previous.dataClassification ?? null,\n isEnabled: previous?.isEnabled ?? true,\n version,\n source,\n isOverridden,\n instructions: reference ? this.rules.instructionAssets?.().textOf(reference) ?? '' : definition.instructions,\n instructionsHash: reference ? reference.hash : hashText(input.instructions),\n instructionsAsset: reference,\n instructionsProblem: assetProblem,\n updatedAt: this.now(),\n runState: previous?.runState ?? (createdOff ? 'off' : 'active'),\n stateChangedAt: previous?.stateChangedAt ?? (createdOff && source === 'admin' ? this.now() : null),\n stateChangedBy: previous?.stateChangedBy ?? (createdOff && source === 'admin' ? 'current-user' : null),\n stateReason: previous?.stateReason ?? null,\n waitingInputs: previous?.waitingInputs ?? 0,\n skills: previous?.skills ?? [],\n shadowOf: previous?.shadowOf ?? null,\n shadow: previous?.shadow ?? (createdInShadow\n ? { ...shadowState(true, false, true, false), changedAt: this.now(), changedBy: 'current-user' }\n : shadowState(false, false, null, false)),\n serviceAccount: previous?.serviceAccount ?? null,\n offBeforeStop: previous?.offBeforeStop ?? false,\n // Code decides for its agents; an agent created here keeps its choice when it is omitted.\n offeredInChat: source === 'code' && previous\n ? previous.offeredInChat ?? true\n : input.offeredInChat ?? previous?.offeredInChat ?? true,\n // The same for what it works on: omitted keeps it, and a new agent works on all objects.\n ...(source === 'code' && previous\n ? pickWorksOn(previous)\n : mockWorksOnFromInput(input) ?? (previous ? pickWorksOn(previous) : { ...mockUndeclaredWorksOn, worksOnDeclared: true })),\n knownSubjectTypes: previous?.knownSubjectTypes ?? []\n });\n }\n\n /** Why the asset an agent created here names does not resolve now, or `null` when it does. */\n private instructionsProblemOf(reference: InstructionAssetReference): InstructionAssetProblem | null {\n const assets = this.rules.instructionAssets?.();\n return assets ? assets.problemOf(reference) : 'no-asset-source';\n }\n\n /**\n * The agent as a read finds it now: the text of the asset it names and the problem when that no\n * longer resolves, as the server checks it at every load.\n */\n private withInstructions(agent: AdminAgent): AdminAgent {\n if (!agent.instructionsAsset) {\n return agent;\n }\n const problem = this.instructionsProblemOf(agent.instructionsAsset);\n return {\n ...agent,\n instructions: problem === null ? this.rules.instructionAssets?.().textOf(agent.instructionsAsset) ?? '' : '',\n instructionsProblem: problem\n };\n }\n\n /** The agent with the warnings the server reports for it, from its profile and classification. */\n private withWarnings(agent: AdminAgent): AdminAgent {\n return {\n ...agent,\n warnings: mockClassificationWarnings(this.scenario.admin?.profileClassifications, agent.profile, agent.dataClassification)\n };\n }\n}\n\n/** A classification name the input chose, or `null` when it chose none. */\nfunction chosenClassification(value: unknown): string | null {\n return typeof value === 'string' && value.trim().length > 0 ? value.trim() : null;\n}\n\nfunction codeAgentFromSummary(agent: AgentSummary): AdminAgentInput {\n return {\n id: agent.id,\n displayName: agent.id,\n description: '',\n instructions: '',\n toolSelectors: [],\n mcpServerIds: [],\n requiredPolicy: null,\n autonomy: agent.canMutate ? 'execute' : 'explain'\n };\n}\n\nfunction toAgentState(stored: StoredAgent): AgentState {\n const agent = stored.agent;\n return {\n agentId: agent.id,\n runState: agent.runState,\n active: agent.runState === 'active',\n changedAt: agent.stateChangedAt,\n changedBy: agent.stateChangedBy,\n reason: agent.stateReason,\n waitingInputs: agent.waitingInputs,\n cancelledRuns: 0,\n startedRuns: 0,\n skills: agent.skills ?? [],\n shadowOf: agent.shadowOf ?? null,\n shadow: agent.shadow ?? shadowState(false, false, null, false),\n serviceAccount: agent.serviceAccount ?? null,\n offBeforeStop: agent.runState === 'stopped' && agent.offBeforeStop === true,\n consultationRoutes: null\n };\n}\n\n/** The route switches of an agent nobody switched yet, with the routes its consultations in code allow. */\nfunction noSwitches(allowed: Partial<Record<NhAssistantConsultationRoute, string[]>> | null): StoredConsultationRoutes {\n return { allowed, overrides: {}, changedAt: null, changedBy: null, reason: null };\n}\n\nfunction shadowState(shadow: boolean, configured: boolean, override: boolean | null, locked: boolean): AgentShadowState {\n return { shadow, configured, override, locked, changedAt: null, changedBy: null, reason: null };\n}\n\n/** A skill's mode after its agent's mode changed: the agent's shadow comes on top of its own. */\nfunction withAgentShadow(skill: AgentShadowState | undefined, agentShadow: boolean): AgentShadowState {\n const own = skill?.override ?? skill?.configured ?? false;\n return { ...(skill ?? shadowState(false, false, null, false)), shadow: agentShadow || own };\n}\n\nfunction shadowRequest(body: unknown): { mode: 'shadow' | 'live' | 'code'; reason: string | null } | null {\n const request = body as { mode?: unknown; reason?: unknown } | undefined;\n if (request?.mode !== 'shadow' && request?.mode !== 'live' && request?.mode !== 'code') {\n return null;\n }\n const reason = typeof request.reason === 'string' && request.reason.trim().length > 0 ? request.reason.trim() : null;\n return reason !== null && reason.length > maxStateReason ? null : { mode: request.mode, reason };\n}\n\n/** What a stored agent works on, carried over to its next version. */\nfunction pickWorksOn(agent: AdminAgent): Partial<AdminAgent> {\n return {\n worksOnSubjectTypes: agent.worksOnSubjectTypes ?? [],\n worksOnAllSubjects: agent.worksOnAllSubjects ?? true,\n worksOnApplication: agent.worksOnApplication ?? false,\n perDivision: agent.perDivision ?? false,\n runPolicy: agent.runPolicy ?? null,\n viewPolicy: agent.viewPolicy ?? null,\n worksOnDeclared: agent.worksOnDeclared ?? true\n };\n}\n","import {\n AdminAgent,\n AssistantDataClassification,\n McpAuthMode,\n McpAuthorization,\n McpAuthorizationStart,\n McpCompletion,\n McpConnection,\n McpConnectionScope,\n McpConnectionStatus,\n McpCustomAuthMode,\n McpDiscovery,\n McpHeadlessUse,\n McpOrganizationConnection,\n McpReader,\n McpServer,\n McpServerInput,\n McpServerTestResult,\n McpTool,\n McpToolEffect,\n NhAssistantMcpAuthorizationOutcome,\n ToolCatalogEntry\n} from '@newheap/platform-ai-chat';\nimport { NhAssistantMockRemoteTool, NhAssistantMockScenario } from './nh-assistant-mock.models';\nimport {\n NhAssistantMockResult,\n mockDashCase,\n mockFailure as failure,\n mockValidationFailure as validationFailure\n} from './nh-assistant-mock-admin-shared';\n\ninterface StoredServer {\n server: Omit<McpServer, 'hasSecret' | 'assignedAgentIds' | 'organizationConnection'>;\n /** A stored secret; a secret reference is `server.secretReference`. They exclude each other. */\n secret: string | null;\n /** The OAuth client secret; never returned. */\n oauthSecret: string | null;\n /** The organization's OAuth connection; null while not connected. */\n organization: McpOrganizationConnection | null;\n /** The caller's own OAuth connection of a server each person connects to; null while not connected. */\n personal: McpOrganizationConnection | null;\n remoteTools: NhAssistantMockRemoteTool[];\n tools: Map<string, McpTool & { inputSchemaHash: string }>;\n}\n\n/** An authorization the mock started; the mock authorization window plays its callback. */\ninterface StoredFlow {\n serverId: string;\n owner: 'organization' | 'user';\n completionCode: string;\n status: 'pending' | 'exchanged' | 'completed' | 'failed';\n allowBackgroundUse: boolean;\n expiresAt: number;\n}\n\n/** What the MCP servers read of the agents and the caller. */\nexport interface NhAssistantMockMcpContext {\n /** Every agent, for the servers assigned to them. */\n agents(): AdminAgent[];\n /** The ids of the agents the caller may use in the chat. */\n chatAgentIds(): string[];\n /** Removes a deleted server from the agents it was assigned to. */\n removeServer(serverId: string): void;\n /** Whether the caller passes the administration policy. */\n canAdminister(): boolean;\n}\n\nconst authModes = ['none', 'bearer', 'api-key', 'basic', 'forward-user-token', 'oauth', 'oauth-client-credentials'];\nconst secretModes = ['bearer', 'api-key', 'basic'];\nconst oauthModes = ['oauth', 'oauth-client-credentials'];\nconst connectionScopes: McpConnectionScope[] = ['organization', 'user'];\nconst scopeTokens = /^[\\x21\\x23-\\x5B\\x5D-\\x7E]+( [\\x21\\x23-\\x5B\\x5D-\\x7E]+)*$/;\nconst flowLifetimeMs = 10 * 60_000;\nconst headlessUses: McpHeadlessUse[] = ['never', 'organization', 'personal'];\nconst transports = ['streamable-http', 'auto'];\nconst secretReference = /^[a-z][a-z0-9-]{0,31}:[A-Za-z0-9][A-Za-z0-9._/-]{0,199}$/;\nconst certificateName = /^[A-Za-z0-9][A-Za-z0-9._-]{0,99}$/;\nconst headerName = /^[A-Za-z0-9-]{1,128}$/;\n/** The longest values the server accepts per field of a server. */\nconst maxServerId = 40;\nconst maxDisplayName = 200;\nconst maxUrl = 2048;\nconst maxSecret = 2000;\nconst maxUserName = 256;\nconst maxPolicy = 256;\nconst maxClientId = 512;\nconst maxAccountLabel = 200;\n/**\n * The readers of a server: at most 16, each with at most 16 media types, a tool name of at most 128\n * characters and a priority from -1000 to 1000.\n */\nconst maxReaders = 16;\nconst maxReaderMediaTypes = 16;\nconst maxReaderToolName = 128;\nconst readerPriority = { min: -1000, max: 1000 } as const;\nconst classifications: AssistantDataClassification[] = ['public', 'internal', 'confidential', 'restricted'];\nconst mediaTypePattern = /^[a-z0-9][a-z0-9!#$&^_.+-]*\\/[a-z0-9][a-z0-9!#$&^_.+-]*$/;\nconst controlCharacters = /[\\u0000-\\u001f\\u007f]/;\n\n/** Records one field error of a server change; the first value per field wins. */\ntype AddFieldError = (field: string, value: 'required' | 'invalid' | 'too-long' | 'not-found') => void;\n\n/**\n * The MCP servers of the mock administration and the caller's own connections: secrets are\n * write-only, new tools start disabled as mutations, a changed remote schema disables a tool, OAuth\n * servers are discovered and confirmed, and authorizations play through the mock window. The mock\n * has one person, the caller, so \"personal connections\" are the caller's.\n */\nexport class NhAssistantMockAdminMcp {\n private readonly servers = new Map<string, StoredServer>();\n /** The caller's consent per server, with the server's address and authentication it holds for. */\n private readonly consents = new Map<string, { fingerprint: string; consentedAt: string }>();\n /** Authorizations started through the mock, by flow id. */\n private readonly flows = new Map<string, StoredFlow>();\n /** What the mock authorization window answers: the person approves, denies or closes the window. */\n private authorizationOutcome: 'approve' | 'deny' | 'cancel';\n\n /**\n * `GET admin/mcp-auth-modes`: the authentication modes the application registered in code, by name,\n * for administrators.\n */\n authModesEndpoint(method: string, segmentCount: number): NhAssistantMockResult {\n if (method !== 'GET' || segmentCount !== 2) {\n return failure('assistant-not-found');\n }\n const modes = [...(this.scenario.admin?.mcpAuthModes ?? [])]\n .sort((left, right) => left.mode.localeCompare(right.mode))\n .map(item => ({ ...item }));\n return { status: 200, body: modes };\n }\n\n constructor(\n private readonly scenario: NhAssistantMockScenario,\n private readonly now: () => string,\n private readonly context: NhAssistantMockMcpContext\n ) {\n const admin = scenario.admin ?? {};\n this.authorizationOutcome = admin.mcpAuthorization ?? 'approve';\n\n for (const { remoteTools, secret, organizationConnected, personalConnected, ...input } of admin.mcpServers ?? []) {\n const stored: StoredServer = {\n server: { ...toServerFields(input), ...newServerState(input), ...oauthFields(input, null, null) },\n secret: secret ?? null,\n oauthSecret: input.oauth?.clientSecret || null,\n organization: null,\n personal: null,\n remoteTools: remoteTools ?? [],\n tools: new Map()\n };\n const readers = readersAfter(input, []);\n if (readers.length > 0) {\n // Preconfigured readers were set up after a sync of the server's tools.\n this.sync(stored);\n stored.server.readers = readers;\n }\n if (oauthModes.includes(input.authMode)) {\n // A preconfigured OAuth server was confirmed by an administrator before.\n const found = this.discovery(input.url);\n stored.server.authorization = typeof found === 'string'\n ? null\n : { issuer: found.issuer, resource: found.resource, confirmedAt: now(), confirmedBy: 'current-user' };\n if (organizationConnected) {\n stored.organization = activeConnection(now(), 'current-user', input.oauth?.scopes ?? null);\n }\n if (personalConnected) {\n stored.personal = activeConnection(now(), 'current-user', input.oauth?.scopes ?? null);\n }\n }\n this.servers.set(input.id, stored);\n }\n for (const consent of admin.mcpConnections ?? []) {\n const stored = this.servers.get(consent.serverId);\n if (stored && consent.allowBackgroundUse) {\n this.consents.set(consent.serverId, { fingerprint: consentFingerprint(stored), consentedAt: now() });\n }\n }\n }\n\n hasServer(serverId: string): boolean {\n return this.servers.has(serverId);\n }\n\n /** What the mock authorization window answers next. */\n setAuthorizationOutcome(outcome: 'approve' | 'deny' | 'cancel'): void {\n this.authorizationOutcome = outcome;\n }\n\n /**\n * Simulates what happens to a server's OAuth connections outside the application: the\n * authorization server refused a refresh (`reauthorization-required`), or the server named another\n * authorization server (`issuer-changed`).\n */\n setConnectionStatus(serverId: string, status: Exclude<McpConnectionStatus, 'not-connected' | 'active'>): void {\n const stored = this.servers.get(serverId);\n const failure = status === 'reauthorization-required' ? 'assistant-mcp-reauthorization-required' : null;\n if (stored?.organization) {\n stored.organization = { ...stored.organization, status, lastFailureCode: failure };\n }\n if (stored?.personal) {\n stored.personal = { ...stored.personal, status, lastFailureCode: failure };\n }\n }\n\n /**\n * Why the caller has to connect a server each person connects to before a turn can use it, or null\n * when the caller's connection is active.\n */\n connectionNeeded(serverId: string): { displayName: string; reason: 'not-connected' | 'reauthorization-required' | 'insufficient-scope' } | null {\n const stored = this.servers.get(serverId);\n if (!stored) {\n return null;\n }\n const personal = stored.personal;\n if (personal?.status === 'active') {\n return personal.requiredScopes ? { displayName: stored.server.displayName, reason: 'insufficient-scope' } : null;\n }\n return {\n displayName: stored.server.displayName,\n reason: personal?.status === 'reauthorization-required' ? 'reauthorization-required' : 'not-connected'\n };\n }\n\n /**\n * Plays the callback of a started authorization as the authorization server and the callback page\n * would: the person approves, denies or closes the window.\n */\n authorizeFlow(flowId: string): NhAssistantMcpAuthorizationOutcome {\n const flow = this.flows.get(flowId);\n if (!flow || flow.status !== 'pending' || flow.expiresAt < Date.parse(this.now())) {\n return { flowId: null, code: 'assistant-mcp-authorization-expired' };\n }\n if (this.authorizationOutcome === 'cancel') {\n return { flowId, code: 'assistant-mcp-authorization-cancelled' };\n }\n if (this.authorizationOutcome === 'deny') {\n flow.status = 'failed';\n return { flowId, code: 'assistant-mcp-authorization-failed' };\n }\n flow.status = 'exchanged';\n return { flowId, completionCode: flow.completionCode };\n }\n\n /** Replaces the tool list of a simulated remote server; the next sync picks it up. */\n setRemoteTools(serverId: string, tools: NhAssistantMockRemoteTool[]): void {\n const stored = this.servers.get(serverId);\n if (stored) {\n stored.remoteTools = structuredClone(tools);\n }\n }\n\n /** The enabled MCP tools for the tool catalog of the administration. */\n catalogEntries(): ToolCatalogEntry[] {\n const catalog: ToolCatalogEntry[] = [];\n for (const stored of this.servers.values()) {\n for (const tool of stored.tools.values()) {\n if (tool.isEnabled) {\n // MCP tools never declare the object they concern.\n catalog.push({ id: tool.localId, source: 'mcp', effect: tool.effect, description: tool.descriptionOverride ?? tool.description, subjectType: null });\n }\n }\n }\n return catalog;\n }\n\n /**\n * `GET mcp-connections` and `PUT mcp-connections/{serverId}`: the caller's consent to background\n * use of servers that run with the caller's own account. A consent holds for the server's address\n * and authentication as they were; a change shows it as not allowed again.\n */\n handleConnections(method: string, segments: string[], body: unknown): NhAssistantMockResult {\n if (segments.length === 2 && segments[1] === 'complete') {\n return method === 'POST' ? this.complete(body) : { status: 405 };\n }\n const personal = this.personalServers();\n if (segments.length === 1) {\n return method === 'GET' ? { status: 200, body: personal } : { status: 405 };\n }\n const serverId = segments[1];\n const listed = personal.find(connection => connection.serverId === serverId);\n if (segments.length === 3 && segments[2] === 'authorize') {\n if (method !== 'POST') {\n return { status: 405 };\n }\n const found = this.personalServer(serverId, listed);\n if ('failure' in found) {\n return found.failure;\n }\n const request = body as { returnUrl?: unknown; allowBackgroundUse?: unknown } | undefined;\n if (request?.returnUrl !== undefined && request.returnUrl !== null && !this.allowedReturnUrl(request.returnUrl)) {\n return validationFailure('returnUrl');\n }\n return this.startFlow(found.stored, 'user', request?.allowBackgroundUse === true && found.connection.offersBackgroundUse);\n }\n if (segments.length === 2 && method === 'DELETE') {\n const found = this.personalServer(serverId, listed);\n if ('failure' in found) {\n return found.failure;\n }\n // The consent to background use stays until the person withdraws it.\n found.stored.personal = null;\n return { status: 204 };\n }\n if (segments.length !== 2 || method !== 'PUT') {\n return segments.length === 2 ? { status: 405 } : failure('assistant-not-found');\n }\n\n if (!listed) {\n return failure('assistant-mcp-server-not-found');\n }\n if (!listed.offersBackgroundUse) {\n return failure('assistant-mcp-headless-not-allowed');\n }\n const allow = (body as { allowBackgroundUse?: unknown } | undefined)?.allowBackgroundUse;\n if (typeof allow !== 'boolean') {\n return failure('assistant-validation', { allowBackgroundUse: ['required'] });\n }\n if (allow) {\n this.consents.set(serverId, { fingerprint: consentFingerprint(this.servers.get(serverId)!), consentedAt: this.now() });\n } else {\n this.consents.delete(serverId);\n }\n return { status: 200, body: this.personalServers().find(connection => connection.serverId === serverId) };\n }\n\n /**\n * The caller's personal OAuth server, or why it is none: only a server each person connects to with\n * OAuth has personal connections, and the caller's are those of agents the caller may use.\n */\n private personalServer(\n serverId: string,\n listed: McpConnection | undefined\n ): { failure: NhAssistantMockResult } | { stored: StoredServer; connection: McpConnection } {\n const stored = this.servers.get(serverId);\n if (!stored) {\n return { failure: failure('assistant-mcp-server-not-found') };\n }\n if (!isPersonalOAuth(stored.server)) {\n return { failure: failure('assistant-mcp-connection-not-supported') };\n }\n if (!listed) {\n return { failure: failure('assistant-mcp-server-not-found') };\n }\n return { stored, connection: listed };\n }\n\n /** `admin/mcp-servers` and everything below it. */\n serversEndpoint(\n method: string,\n id: string | undefined,\n action: string | undefined,\n child: string | undefined,\n body: unknown,\n length: number\n ): NhAssistantMockResult {\n if (id === 'discover' && length === 3 && method === 'POST') {\n const url = (body as { url?: unknown } | undefined)?.url;\n if (typeof url !== 'string' || url.trim().length === 0) {\n return failure('assistant-validation', { url: ['required'] });\n }\n const found = this.discovery(url.trim());\n return typeof found === 'string' ? discoveryFailure(found) : { status: 200, body: found };\n }\n if (id === undefined) {\n if (method === 'GET') {\n return { status: 200, body: [...this.servers.values()].map(stored => this.toServer(stored)) };\n }\n if (method !== 'POST') {\n return { status: 405 };\n }\n\n const input = body as McpServerInput;\n if (!isServerInput(input)) {\n return validationFailure();\n }\n const errors = this.fieldErrors(input, null);\n if (Object.keys(errors).length > 0) {\n return failure('assistant-validation', errors);\n }\n if (this.servers.has(input.id)) {\n return failure('assistant-mcp-server-exists');\n }\n const oauth = this.confirmOAuth(input, null);\n if ('failure' in oauth) {\n return oauth.failure;\n }\n\n const stored: StoredServer = {\n server: { ...toServerFields(input), ...newServerState(input), ...oauthFields(input, null, oauth.authorization) },\n secret: secretModes.includes(input.authMode) && input.secret ? input.secret : null,\n oauthSecret: oauthModes.includes(input.authMode) && input.oauth?.clientSecret ? input.oauth.clientSecret : null,\n organization: null,\n personal: null,\n remoteTools: [],\n tools: new Map()\n };\n this.servers.set(input.id, stored);\n return { status: 201, body: this.toServer(stored) };\n }\n\n const stored = this.servers.get(id);\n if (!stored) {\n return failure('assistant-mcp-server-not-found');\n }\n\n if (length === 3) {\n if (method === 'PUT') {\n const input = body as McpServerInput;\n if (!isServerInput(input)) {\n return validationFailure();\n }\n const errors = this.fieldErrors(input, stored);\n if (input.id !== id) {\n errors['id'] = ['invalid'];\n }\n if (Object.keys(errors).length > 0) {\n return failure('assistant-validation', errors);\n }\n // An omitted headless use, transport or user name keeps the stored value, as on the server.\n const headlessUse = input.headlessUse ?? stored.server.headlessUse;\n const oauth = this.confirmOAuth(input, stored);\n if ('failure' in oauth) {\n return oauth.failure;\n }\n const before = stored.server;\n stored.server = {\n ...stored.server,\n ...toServerFields(input, stored.server),\n ...oauthFields(input, stored.server, oauth.authorization),\n headlessUse,\n transport: input.transport ?? stored.server.transport,\n readers: readersAfter(input, stored.server.readers)\n };\n if (!oauthModes.includes(input.authMode)) {\n stored.oauthSecret = null;\n } else if (input.oauth?.clientSecret) {\n stored.oauthSecret = input.oauth.clientSecret;\n } else if (input.oauth?.clientSecretReference) {\n stored.oauthSecret = null;\n }\n stored.server = { ...stored.server, oauth: stored.server.oauth && { ...stored.server.oauth, hasClientSecret: stored.oauthSecret !== null } };\n if (oauthChanged(before, stored.server)) {\n // The tokens no longer fit the server: they are revoked and everyone connects again.\n stored.organization = null;\n stored.personal = null;\n } else if (oauth.authorization !== null && before.authorization?.issuer === oauth.authorization.issuer &&\n stored.organization?.status === 'issuer-changed') {\n stored.organization = { ...stored.organization, status: 'active' };\n }\n if (!secretModes.includes(input.authMode)) {\n stored.secret = null;\n stored.server.secretReference = null;\n } else if (input.secret) {\n stored.secret = input.secret;\n stored.server.secretReference = null;\n } else if (input.secret === '') {\n stored.secret = null;\n }\n if (input.secretReference && secretModes.includes(input.authMode)) {\n stored.secret = null;\n }\n return { status: 200, body: this.toServer(stored) };\n }\n if (method === 'DELETE') {\n this.servers.delete(id);\n this.context.removeServer(id);\n return { status: 204 };\n }\n return { status: 405 };\n }\n\n if (action === 'connection' && length === 4) {\n if (method !== 'GET' && method !== 'DELETE') {\n return { status: 405 };\n }\n // The organization connection exists for OAuth; for a server each person connects to these\n // endpoints act on the administrator's own connection, as the authorization does.\n if (!oauthModes.includes(stored.server.authMode)) {\n return failure('assistant-mcp-connection-not-supported');\n }\n const personal = isPersonalOAuth(stored.server);\n if (method === 'GET') {\n return { status: 200, body: (personal ? stored.personal : this.toServer(stored).organizationConnection) ?? notConnected() };\n }\n if (personal) {\n stored.personal = null;\n } else {\n stored.organization = null;\n }\n return { status: 204 };\n }\n if (action === 'connection' && child === 'authorize' && length === 5) {\n return method === 'POST' ? this.startAuthorization(stored, body) : { status: 405 };\n }\n if (action === 'connections' && length === 4) {\n if (method !== 'DELETE') {\n return { status: 405 };\n }\n // Personal connections exist only for a server each person connects to with OAuth.\n if (!isPersonalOAuth(stored.server)) {\n return failure('assistant-mcp-connection-not-supported');\n }\n stored.personal = null;\n return { status: 204 };\n }\n if (action === 'connections' && child === 'summary' && length === 5) {\n if (method !== 'GET') {\n return { status: 405 };\n }\n if (!isPersonalOAuth(stored.server)) {\n return failure('assistant-mcp-connection-not-supported');\n }\n // The mock has one person: the caller.\n const status = stored.personal?.status;\n return {\n status: 200,\n body: {\n active: status === 'active' ? 1 : 0,\n reauthorizationRequired: status === 'reauthorization-required' ? 1 : 0,\n issuerChanged: status === 'issuer-changed' ? 1 : 0\n }\n };\n }\n\n if (length === 4 && action === 'test' && method === 'POST') {\n const code = this.connectionFailure(stored);\n const result: McpServerTestResult = code\n ? { ok: false, code, toolCount: null }\n : { ok: true, code: null, toolCount: stored.remoteTools.length };\n stored.server = { ...stored.server, lastConnectAt: this.now(), lastConnectCode: code };\n return { status: 200, body: result };\n }\n if (length === 4 && action === 'sync' && method === 'POST') {\n const code = this.connectionFailure(stored);\n const syncedAt = this.now();\n stored.server = {\n ...stored.server,\n lastSyncAt: syncedAt,\n lastSyncStatus: code ? 'failed' : 'ok',\n lastConnectAt: syncedAt,\n lastConnectCode: code\n };\n if (code) {\n // The code's one status: a blocked host 400, a connection the server needs first 409, a\n // failure of the remote server 502.\n return failure(code);\n }\n this.sync(stored);\n return { status: 200, body: toTools(stored) };\n }\n if (length === 4 && action === 'tools' && method === 'GET') {\n return { status: 200, body: toTools(stored) };\n }\n if (length === 5 && action === 'tools' && method === 'PUT' && child !== undefined) {\n const tool = stored.tools.get(child);\n const input = body as { isEnabled?: unknown; effect?: unknown; descriptionOverride?: unknown } | undefined;\n if (!tool) {\n return failure('assistant-mcp-tool-not-found');\n }\n if (typeof input?.isEnabled !== 'boolean' || (input.effect !== 'read-only' && input.effect !== 'mutation') ||\n (input.descriptionOverride !== null && typeof input.descriptionOverride !== 'string')) {\n return validationFailure();\n }\n if (input.isEnabled && tool.status === 'missing') {\n return validationFailure('isEnabled');\n }\n\n const override = typeof input.descriptionOverride === 'string' && input.descriptionOverride.trim().length > 0\n ? input.descriptionOverride.slice(0, 1_000)\n : null;\n const updated = {\n ...tool,\n isEnabled: input.isEnabled,\n effect: input.effect as McpToolEffect,\n descriptionOverride: override,\n status: input.isEnabled && tool.status === 'schema-changed' ? 'available' as const : tool.status\n };\n stored.tools.set(child, updated);\n return { status: 200, body: toTool(updated) };\n }\n\n return failure('assistant-not-found');\n }\n\n private sync(stored: StoredServer): void {\n const seen = new Set<string>();\n for (const remote of stored.remoteTools) {\n seen.add(remote.remoteName);\n const existing = stored.tools.get(remote.remoteName);\n const description = remote.description.slice(0, 1_000);\n if (!existing) {\n stored.tools.set(remote.remoteName, {\n remoteName: remote.remoteName,\n localId: `mcp.${stored.server.id}.${kebab(remote.remoteName)}`,\n description,\n descriptionOverride: null,\n isEnabled: false,\n effect: 'mutation',\n status: 'available',\n readOnlyHint: remote.readOnlyHint ?? null,\n inputSchemaHash: remote.inputSchemaHash\n });\n continue;\n }\n\n const changed = existing.inputSchemaHash !== remote.inputSchemaHash;\n stored.tools.set(remote.remoteName, {\n ...existing,\n description,\n readOnlyHint: remote.readOnlyHint ?? null,\n inputSchemaHash: remote.inputSchemaHash,\n isEnabled: changed ? false : existing.isEnabled,\n status: changed ? 'schema-changed' : existing.status === 'missing' ? 'available' : existing.status\n });\n }\n\n for (const [name, tool] of stored.tools) {\n if (!seen.has(name)) {\n stored.tools.set(name, { ...tool, isEnabled: false, status: 'missing' });\n }\n }\n }\n\n /**\n * The field errors of a server change, as the server reports them in one refusal: the fields\n * themselves, the credential and the OAuth settings. Empty when the change is valid.\n */\n private fieldErrors(input: McpServerInput, stored: StoredServer | null): Record<string, string[]> {\n const errors: Record<string, string[]> = {};\n const add: AddFieldError = (field, value) => {\n if (!errors[field]) {\n errors[field] = [value];\n }\n };\n\n checkServerFields(input, stored, this.scenario.admin?.policies, add, this.scenario.admin?.mcpAuthModes ?? []);\n this.checkCredential(input, stored, add);\n this.checkOAuth(input, stored, add);\n checkReaders(input, stored, add);\n return errors;\n }\n\n /**\n * The OAuth settings of a server change, as on the server: the connection scope, the scopes, a\n * client id and secret where needed, the account label of an organization connection, and the\n * confirmation of discovery for a new server or a new address.\n */\n private checkOAuth(input: McpServerInput, stored: StoredServer | null, add: AddFieldError): void {\n if (!oauthModes.includes(input.authMode)) {\n return;\n }\n const scope = input.connectionScope ?? stored?.server.connectionScope ?? 'organization';\n if (!connectionScopes.includes(scope) || (input.authMode !== 'oauth' && scope !== 'organization')) {\n add('connectionScope', 'invalid');\n }\n const settings = stored?.server.oauth ?? null;\n const clientId = effective(input.oauth?.clientId, settings?.clientId ?? null);\n const scopes = effective(input.oauth?.scopes, settings?.scopes ?? null);\n const label = effective(input.oauth?.organizationAccountLabel, settings?.organizationAccountLabel ?? null);\n const reference = effective(input.oauth?.clientSecretReference, settings?.clientSecretReference ?? null);\n if (scopes !== null && (scopes.length > 1_024 || !scopeTokens.test(scopes.trim()))) {\n add('oauth.scopes', 'invalid');\n }\n if (clientId !== null && clientId.length > maxClientId) {\n add('oauth.clientId', 'too-long');\n }\n if (typeof input.oauth?.clientSecret === 'string' && input.oauth.clientSecret.length > maxSecret) {\n add('oauth.clientSecret', 'too-long');\n }\n if (input.authMode === 'oauth' && scope === 'organization') {\n if (label === null || label.trim().length === 0) {\n add('oauth.organizationAccountLabel', 'required');\n } else if (label.length > maxAccountLabel) {\n add('oauth.organizationAccountLabel', 'too-long');\n }\n }\n if (reference !== null && !input.oauth?.clientSecret) {\n if (!secretReference.test(reference) || reference.includes('..')) {\n add('oauth.clientSecretReference', 'invalid');\n } else if (!this.resolves(reference)) {\n add('oauth.clientSecretReference', 'not-found');\n }\n }\n if (input.authMode === 'oauth-client-credentials') {\n if (clientId === null || clientId.trim().length === 0) {\n add('oauth.clientId', 'required');\n }\n const hasSecret = input.oauth?.clientSecret === undefined || input.oauth?.clientSecret === null\n ? stored?.oauthSecret != null && !input.oauth?.clientSecretReference\n : input.oauth.clientSecret.length > 0;\n const certificate = input.clientCertificateReference === undefined || input.clientCertificateReference === null\n ? stored?.server.clientCertificateReference ?? null\n : input.clientCertificateReference || null;\n if (!hasSecret && reference === null && certificate === null) {\n add('oauth.clientSecret', 'required');\n }\n }\n const pinned = stored !== null && oauthModes.includes(stored.server.authMode) ? stored.server.authorization : null;\n if (input.oauth?.confirmAuthorization !== true && (pinned === null || stored!.server.url !== input.url.trim())) {\n add('oauth.confirmAuthorization', 'required');\n }\n }\n\n /**\n * The authorization an OAuth server change pins: the confirmed one it had, or what discovery finds\n * now when the administrator confirmed it. Discovery fails with its own code.\n */\n private confirmOAuth(input: McpServerInput, stored: StoredServer | null): { failure: NhAssistantMockResult } | { authorization: McpAuthorization | null } {\n if (!oauthModes.includes(input.authMode)) {\n return { authorization: null };\n }\n if (input.oauth?.confirmAuthorization !== true) {\n return { authorization: stored?.server.authorization ?? null };\n }\n const found = this.discovery(input.url.trim());\n if (typeof found === 'string') {\n return { failure: discoveryFailure(found) };\n }\n if (input.authMode === 'oauth' && !found.pkceSupported) {\n return { failure: failure('assistant-mcp-pkce-unsupported') };\n }\n return { authorization: { issuer: found.issuer, resource: found.resource, confirmedAt: this.now(), confirmedBy: 'current-user' } };\n }\n\n /** Whether a secret reference names an available secret: by default every `config:` one. */\n private resolves(reference: string): boolean {\n return this.scenario.admin?.secretReferences?.includes(reference) ?? reference.startsWith('config:');\n }\n\n /**\n * What discovery finds for an address: a host with `no-oauth` has no protected resource metadata,\n * `no-pkce` an authorization server without PKCE; `admin.mcpDiscovery` overrides per host.\n */\n private discovery(url: string): McpDiscovery | string {\n let parsed: URL;\n try {\n parsed = new URL(url);\n } catch {\n return 'assistant-validation';\n }\n const host = parsed.hostname.toLowerCase();\n if (host.startsWith('169.254.') || host.startsWith('[fe80') || host.includes('metadata')) {\n return 'assistant-mcp-host-blocked';\n }\n if (host.includes('no-oauth') || host.includes('unreachable')) {\n return 'assistant-mcp-discovery-failed';\n }\n const issuer = `https://auth.${host}`;\n const path = parsed.pathname.replace(/\\/+$/, '');\n return {\n resource: `${parsed.protocol}//${parsed.host.toLowerCase()}${path}${parsed.search}`,\n issuer,\n authorizationServers: [issuer],\n challengedScopes: ['mcp:read'],\n scopesSupported: ['mcp:read', 'mcp:write', 'offline_access'],\n grantTypesSupported: ['authorization_code', 'refresh_token', 'client_credentials'],\n pkceSupported: !host.includes('no-pkce'),\n clientIdMetadataDocumentSupported: false,\n dynamicRegistrationSupported: true,\n tokenEndpointAuthMethods: ['client_secret_basic', 'private_key_jwt', 'none'],\n ...this.scenario.admin?.mcpDiscovery?.[host]\n };\n }\n\n /** `POST admin/mcp-servers/{id}/connection/authorize`: starts the organization's authorization. */\n private startAuthorization(stored: StoredServer, body: unknown): NhAssistantMockResult {\n // Only an authorization by a person connects: client credentials connect without one.\n if (stored.server.authMode !== 'oauth') {\n return failure('assistant-mcp-connection-not-supported');\n }\n const returnUrl = (body as { returnUrl?: unknown } | undefined)?.returnUrl;\n if (returnUrl !== undefined && returnUrl !== null && !this.allowedReturnUrl(returnUrl)) {\n return validationFailure('returnUrl');\n }\n // For a server each person connects to, the administrator connects their own account.\n return this.startFlow(stored, stored.server.connectionScope === 'user' ? 'user' : 'organization', false);\n }\n\n private startFlow(stored: StoredServer, owner: 'organization' | 'user', allowBackgroundUse: boolean): NhAssistantMockResult {\n const authorization = stored.server.authorization;\n if (authorization === null) {\n return failure('assistant-mcp-authorization-not-confirmed');\n }\n const flowId = uuid();\n const expiresAt = Date.parse(this.now()) + flowLifetimeMs;\n this.flows.set(flowId, {\n serverId: stored.server.id,\n owner,\n completionCode: `mock-completion-${flowId.replace(/-/g, '')}`,\n status: 'pending',\n allowBackgroundUse,\n expiresAt\n });\n const query = new URLSearchParams({\n response_type: 'code',\n client_id: stored.server.oauth?.clientId ?? 'mock-registered-client',\n resource: authorization.resource,\n state: flowId\n });\n const start: McpAuthorizationStart = {\n flowId,\n authorizationUrl: `${authorization.issuer}/authorize?${query.toString()}`,\n expiresAt: new Date(expiresAt).toISOString(),\n callbackOrigin: 'https://assistant.mock.local'\n };\n return { status: 200, body: start };\n }\n\n /** `POST mcp-connections/complete`: activates the connection of a flow the caller started. */\n private complete(body: unknown): NhAssistantMockResult {\n const request = body as { flowId?: unknown; completionCode?: unknown } | undefined;\n if (typeof request?.flowId !== 'string' || request.flowId.length === 0) {\n return failure('assistant-validation', { flowId: ['required'] });\n }\n if (typeof request.completionCode !== 'string' || request.completionCode.length === 0) {\n return failure('assistant-validation', { completionCode: ['required'] });\n }\n const flow = this.flows.get(request.flowId);\n if (!flow || flow.status !== 'exchanged' || flow.expiresAt < Date.parse(this.now())) {\n return failure('assistant-mcp-authorization-expired');\n }\n if (flow.completionCode !== request.completionCode) {\n return failure('assistant-mcp-authorization-invalid');\n }\n if (flow.owner === 'organization' && !this.context.canAdminister()) {\n return failure('assistant-forbidden');\n }\n const stored = this.servers.get(flow.serverId);\n if (!stored) {\n return failure('assistant-mcp-server-not-found');\n }\n flow.status = 'completed';\n const connection = activeConnection(this.now(), 'current-user', stored.server.oauth?.scopes ?? null);\n if (flow.owner === 'user') {\n stored.personal = connection;\n if (flow.allowBackgroundUse) {\n this.consents.set(stored.server.id, { fingerprint: consentFingerprint(stored), consentedAt: this.now() });\n }\n } else {\n stored.organization = connection;\n }\n const completion: McpCompletion = { serverId: stored.server.id, ownerKind: flow.owner, status: 'active', grantedScopes: connection.grantedScopes };\n return { status: 200, body: completion };\n }\n\n /** By default every http(s) address; `admin.mcpReturnOrigins` limits the origins. */\n private allowedReturnUrl(value: unknown): boolean {\n if (typeof value !== 'string') {\n return false;\n }\n try {\n const url = new URL(value);\n const origins = this.scenario.admin?.mcpReturnOrigins;\n return (url.protocol === 'https:' || url.protocol === 'http:') && url.hash.length === 0 &&\n (origins === undefined || origins.includes(url.origin));\n } catch {\n return false;\n }\n }\n\n private connectionFailure(stored: StoredServer): string | null {\n const oauthFailure = this.oauthConnectionFailure(stored);\n if (oauthFailure !== undefined) {\n return oauthFailure;\n }\n let url: URL;\n try {\n url = new URL(stored.server.url);\n } catch {\n return 'assistant-mcp-unreachable';\n }\n\n const host = url.hostname.toLowerCase();\n if (host.startsWith('169.254.') || host.startsWith('[fe80') || host.includes('metadata')) {\n return 'assistant-mcp-host-blocked';\n }\n if (stored.server.authMode === 'forward-user-token' && !(this.scenario.admin?.forwardUserTokenHosts ?? []).includes(host)) {\n return 'assistant-mcp-host-blocked';\n }\n if (host.includes('unreachable')) {\n return 'assistant-mcp-unreachable';\n }\n if (secretModes.includes(stored.server.authMode) && !stored.secret && !stored.server.secretReference) {\n return 'assistant-mcp-unauthorized';\n }\n return null;\n }\n\n /**\n * The state of an OAuth server's organization connection for a test or sync: client credentials\n * connect on first use; an authorization needs an administrator to connect first. `undefined` for\n * servers without OAuth.\n */\n private oauthConnectionFailure(stored: StoredServer): string | null | undefined {\n const server = stored.server;\n if (!oauthModes.includes(server.authMode)) {\n return undefined;\n }\n if (server.authorization === null) {\n return 'assistant-mcp-authorization-not-confirmed';\n }\n if (server.authMode === 'oauth-client-credentials' && stored.organization === null) {\n stored.organization = activeConnection(this.now(), 'client-credentials', server.oauth?.scopes ?? null);\n }\n if (server.authMode === 'oauth' && server.connectionScope === 'user') {\n // Tests and syncs of a server each person connects to use the administrator's own account.\n switch (stored.personal?.status ?? 'not-connected') {\n case 'not-connected':\n return 'assistant-mcp-connection-required';\n case 'reauthorization-required':\n return 'assistant-mcp-reauthorization-required';\n case 'issuer-changed':\n return 'assistant-mcp-issuer-changed';\n default:\n return null;\n }\n }\n switch (stored.organization?.status ?? 'not-connected') {\n case 'not-connected':\n return 'assistant-mcp-connection-required';\n case 'reauthorization-required':\n return 'assistant-mcp-reauthorization-required';\n case 'issuer-changed':\n return 'assistant-mcp-issuer-changed';\n default:\n return null;\n }\n }\n\n /**\n * The field errors of the input's credential: a basic user name, a secret or a reference that names\n * an available secret, and a configured client certificate. A reference or certificate the\n * application cannot resolve is the field error `not-found`.\n */\n private checkCredential(input: McpServerInput, stored: StoredServer | null, add: AddFieldError): void {\n const admin = this.scenario.admin ?? {};\n const userName = input.userName ?? stored?.server.userName ?? null;\n if (input.authMode === 'basic' && (!userName || userName.trim().length === 0)) {\n add('userName', 'required');\n } else if (userName && (userName.length > maxUserName || userName.includes(':'))) {\n add('userName', 'invalid');\n }\n if (typeof input.secret === 'string' && input.secret.length > maxSecret) {\n add('secret', 'too-long');\n }\n if (input.secret && input.secretReference) {\n add('secretReference', 'invalid');\n }\n const reference = input.secretReference === undefined || input.secretReference === null\n ? (input.secret ? null : stored?.server.secretReference ?? null)\n : input.secretReference || null;\n if (reference !== null && (!secretReference.test(reference) || reference.includes('..'))) {\n add('secretReference', 'invalid');\n }\n if (secretModes.includes(input.authMode)) {\n // As on the server: bearer, api-key and basic need a stored secret or a reference. A new stored\n // secret replaces a reference, a new reference a stored secret.\n const storedSecret = input.secret === undefined || input.secret === null\n ? !!stored?.secret && !input.secretReference\n : input.secret.length > 0;\n if (!storedSecret && (reference === null || !!input.secret)) {\n add('secret', 'required');\n }\n if (reference !== null && !input.secret && !this.resolves(reference)) {\n add('secretReference', 'not-found');\n }\n }\n const certificate = input.clientCertificateReference === undefined || input.clientCertificateReference === null\n ? stored?.server.clientCertificateReference ?? null\n : input.clientCertificateReference || null;\n if (certificate !== null && !certificateName.test(certificate)) {\n add('clientCertificateReference', 'invalid');\n } else if (certificate !== null && !(admin.clientCertificates ?? []).includes(certificate)) {\n add('clientCertificateReference', 'not-found');\n }\n }\n\n /** Servers with the caller's own account for background runs, on an agent the caller may use. */\n private personalServers(): McpConnection[] {\n const visible = new Set(this.context.chatAgentIds());\n const agents = this.context.agents();\n const result: McpConnection[] = [];\n for (const stored of this.servers.values()) {\n const server = stored.server;\n const agentIds = agents\n .filter(agent => visible.has(agent.id) && agent.mcpServerIds.includes(server.id))\n .map(agent => agent.id);\n const personalOAuth = server.authMode === 'oauth' && server.connectionScope === 'user';\n const forwardsToken = server.headlessUse === 'personal' &&\n (server.authMode === 'forward-user-token' || customOwnership(this.scenario, server.authMode) === 'person');\n if (!server.isEnabled || !(personalOAuth || forwardsToken) || agentIds.length === 0) {\n continue;\n }\n const consent = this.consents.get(server.id);\n const allowed = consent !== undefined && consent.fingerprint === consentFingerprint(stored);\n let host = '';\n try {\n host = new URL(server.url).hostname;\n } catch {\n host = '';\n }\n result.push({\n serverId: server.id,\n displayName: server.displayName,\n host,\n allowBackgroundUse: allowed,\n consentedAt: allowed ? consent.consentedAt : null,\n agentIds,\n connectionStatus: personalOAuth ? stored.personal?.status ?? 'not-connected' : null,\n grantedScopes: personalOAuth ? stored.personal?.grantedScopes ?? null : null,\n requiredScopes: personalOAuth ? stored.personal?.requiredScopes ?? null : null,\n connectedAt: personalOAuth ? stored.personal?.connectedAt ?? null : null,\n offersBackgroundUse: server.headlessUse === 'personal'\n });\n }\n return result;\n }\n\n private toServer(stored: StoredServer): McpServer {\n const server = stored.server;\n const organizationCredential = server.authMode === 'oauth-client-credentials' ||\n (server.authMode === 'oauth' && server.connectionScope === 'organization');\n return {\n ...stored.server,\n organizationConnection: organizationCredential ? stored.organization ?? notConnected() : null,\n hasSecret: stored.secret !== null,\n assignedAgentIds: this.context.agents()\n .filter(agent => agent.mcpServerIds.includes(stored.server.id))\n .map(agent => agent.id)\n };\n }\n}\n\nfunction toServerFields(\n input: McpServerInput,\n stored?: Omit<McpServer, 'hasSecret' | 'assignedAgentIds' | 'organizationConnection'>\n): Pick<McpServer, 'id' | 'displayName' | 'url' | 'authMode' | 'headerName' | 'requiredPolicy' | 'isEnabled' | 'userName' | 'secretReference' | 'clientCertificateReference'> {\n const usesSecret = secretModes.includes(input.authMode);\n const reference = input.secretReference === undefined || input.secretReference === null\n ? (input.secret ? null : stored?.secretReference ?? null)\n : input.secretReference || null;\n const certificate = input.clientCertificateReference === undefined || input.clientCertificateReference === null\n ? stored?.clientCertificateReference ?? null\n : input.clientCertificateReference || null;\n return {\n id: input.id,\n displayName: input.displayName,\n url: input.url,\n authMode: input.authMode,\n headerName: input.authMode === 'api-key' ? (input.headerName || 'X-Api-Key') : null,\n requiredPolicy: input.requiredPolicy,\n isEnabled: input.isEnabled,\n userName: input.authMode === 'basic' ? (input.userName ?? stored?.userName ?? null)?.trim() ?? null : null,\n secretReference: usesSecret ? reference : null,\n clientCertificateReference: certificate\n };\n}\n\n/**\n * The OAuth fields of a server after an input: the connection scope, the settings without the\n * client secret, and the confirmed authorization.\n */\nfunction oauthFields(\n input: McpServerInput,\n stored: Omit<McpServer, 'hasSecret' | 'assignedAgentIds' | 'organizationConnection'> | null,\n authorization: McpAuthorization | null\n): Pick<McpServer, 'connectionScope' | 'oauth' | 'authorization'> {\n if (!oauthModes.includes(input.authMode)) {\n return { connectionScope: 'organization', oauth: null, authorization: null };\n }\n const settings = stored?.oauth ?? null;\n const scope = input.authMode === 'oauth' ? input.connectionScope ?? stored?.connectionScope ?? 'organization' : 'organization';\n const clientId = effective(input.oauth?.clientId, settings?.clientId ?? null)?.trim() || null;\n const scopes = effective(input.oauth?.scopes, settings?.scopes ?? null)?.trim() || null;\n const label = input.authMode === 'oauth' && scope === 'organization'\n ? effective(input.oauth?.organizationAccountLabel, settings?.organizationAccountLabel ?? null)?.trim() || null\n : null;\n const reference = clientId === null || input.oauth?.clientSecret\n ? null\n : effective(input.oauth?.clientSecretReference, settings?.clientSecretReference ?? null) || null;\n return {\n connectionScope: scope,\n oauth: {\n clientId,\n hasClientSecret: clientId !== null && (!!input.oauth?.clientSecret || (input.oauth?.clientSecret !== '' && reference === null && (settings?.hasClientSecret ?? false))),\n clientSecretReference: reference,\n scopes: scopes === null ? null : scopes.split(' ').filter(Boolean).join(' '),\n organizationAccountLabel: label\n },\n authorization\n };\n}\n\n/** Whether a change makes the server's stored tokens unusable. */\nfunction oauthChanged(\n before: Omit<McpServer, 'hasSecret' | 'assignedAgentIds' | 'organizationConnection'>,\n after: Omit<McpServer, 'hasSecret' | 'assignedAgentIds' | 'organizationConnection'>\n): boolean {\n return before.url !== after.url || before.authMode !== after.authMode || before.connectionScope !== after.connectionScope ||\n before.authorization?.issuer !== after.authorization?.issuer || before.oauth?.scopes !== after.oauth?.scopes ||\n before.oauth?.clientId !== after.oauth?.clientId;\n}\n\n/** The value after an input: undefined or null keeps the stored value, `\"\"` clears it. */\nfunction effective(input: string | null | undefined, stored: string | null): string | null {\n if (input === undefined || input === null) {\n return stored;\n }\n return input.length === 0 ? null : input;\n}\n\nfunction notConnected(): McpOrganizationConnection {\n return { status: 'not-connected', connectedAt: null, connectedBy: null, grantedScopes: null, requiredScopes: null, accessTokenExpiresAt: null, lastFailureCode: null };\n}\n\nfunction activeConnection(now: string, connectedBy: string, scopes: string | null): McpOrganizationConnection {\n return {\n status: 'active',\n connectedAt: now,\n connectedBy,\n grantedScopes: scopes ?? 'mcp:read',\n requiredScopes: null,\n accessTokenExpiresAt: new Date(Date.parse(now) + 3_600_000).toISOString(),\n lastFailureCode: null\n };\n}\n\n/** The refusal of a discovery: an address that is no URL at its field, otherwise the discovery's code. */\nfunction discoveryFailure(code: string): NhAssistantMockResult {\n return code === 'assistant-validation' ? failure(code, { url: ['invalid'] }) : failure(code);\n}\n\n/** A server each person connects to with OAuth: the only kind with personal connections. */\nfunction isPersonalOAuth(server: Pick<McpServer, 'authMode' | 'connectionScope'>): boolean {\n return server.authMode === 'oauth' && server.connectionScope === 'user';\n}\n\nfunction uuid(): string {\n return globalThis.crypto?.randomUUID?.() ?? 'xxxxxxxx-xxxx-4xxx-8xxx-xxxxxxxxxxxx'.replace(/x/g, () => Math.floor(Math.random() * 16).toString(16));\n}\n\n/** What a person's consent holds for: the server, its address and its authentication. */\nfunction consentFingerprint(stored: StoredServer): string {\n return [stored.server.id, stored.server.url.trim(), stored.server.authMode, stored.server.authorization?.issuer ?? '', stored.server.oauth?.scopes ?? ''].join('\\n');\n}\n\n/** The state of a server that was just added: never in headless runs unless the input says so. */\nfunction newServerState(input: McpServerInput): Pick<McpServer, 'lastSyncAt' | 'lastSyncStatus' | 'headlessUse' | 'lastConnectAt' | 'lastConnectCode' | 'transport' | 'readers'> {\n return {\n lastSyncAt: null,\n lastSyncStatus: null,\n headlessUse: input.headlessUse ?? 'never',\n lastConnectAt: null,\n lastConnectCode: null,\n transport: input.transport ?? 'streamable-http',\n // A new server has no synced tools, so it gets its readers after a sync.\n readers: []\n };\n}\n\n/** A media type in lowercase without parameters, or null for a value that is not one. */\nfunction normalizeMediaType(value: unknown): string | null {\n if (typeof value !== 'string') {\n return null;\n }\n const essence = value.split(';')[0].trim().toLowerCase();\n return essence.length <= 128 && mediaTypePattern.test(essence) ? essence : null;\n}\n\n/**\n * The readers after a valid input, as on the server: omitted or null readers keep the stored ones,\n * an empty list removes them all, and the media types are stored normalized and once each. The\n * server returns them by priority, highest first, then by tool name.\n */\nfunction readersAfter(input: McpServerInput, stored: McpReader[]): McpReader[] {\n const readers = input.readers;\n if (readers === undefined || readers === null) {\n return stored;\n }\n return readers\n .map(reader => ({\n mediaTypes: [...new Set(reader.mediaTypes.map(normalizeMediaType).filter((mediaType): mediaType is string => mediaType !== null))],\n toolName: reader.toolName ?? '',\n maxClassification: reader.maxClassification ?? 'restricted',\n priority: reader.priority ?? 0\n }))\n .sort((left, right) => right.priority - left.priority || compareOrdinal(left.toolName, right.toolName));\n}\n\n/**\n * The field errors of the readers, as the server reports them: `readers` (too-long for more than\n * 16) and per reader, with its index: `readers[0].mediaTypes` (required, invalid, too-long for more\n * than 16), `readers[0].toolName` (required, invalid also for a second reader of the same tool,\n * not-found when the server has not synced that tool), `readers[0].maxClassification` (required,\n * invalid) and `readers[0].priority` (invalid outside -1000 to 1000).\n */\nfunction checkReaders(input: McpServerInput, stored: StoredServer | null, add: AddFieldError): void {\n const readers = input.readers;\n if (!Array.isArray(readers) || readers.length === 0) {\n return;\n }\n if (readers.length > maxReaders) {\n add('readers', 'too-long');\n return;\n }\n\n const readTools = new Set<string>();\n readers.forEach((reader, index) => {\n const field = (name: string) => `readers[${index}].${name}`;\n const mediaTypes = Array.isArray(reader?.mediaTypes) ? reader.mediaTypes.map(normalizeMediaType) : [];\n if (mediaTypes.length === 0) {\n add(field('mediaTypes'), 'required');\n } else if (mediaTypes.some(mediaType => mediaType === null)) {\n add(field('mediaTypes'), 'invalid');\n } else if (new Set(mediaTypes).size > maxReaderMediaTypes) {\n add(field('mediaTypes'), 'too-long');\n }\n\n const toolName = reader?.toolName;\n if (typeof toolName !== 'string' || toolName.trim().length === 0) {\n add(field('toolName'), 'required');\n } else if (toolName.length > maxReaderToolName || controlCharacters.test(toolName) || readTools.has(toolName)) {\n add(field('toolName'), 'invalid');\n } else if (!stored?.tools.has(toolName)) {\n add(field('toolName'), 'not-found');\n }\n if (typeof toolName === 'string') {\n readTools.add(toolName);\n }\n\n const classification = reader?.maxClassification;\n if (classification === null || classification === undefined) {\n add(field('maxClassification'), 'required');\n } else if (!classifications.includes(classification)) {\n add(field('maxClassification'), 'invalid');\n }\n\n const priority = reader?.priority ?? 0;\n if (!Number.isInteger(priority) || priority < readerPriority.min || priority > readerPriority.max) {\n add(field('priority'), 'invalid');\n }\n });\n}\n\n/** Compares two names by their characters, as the server orders them. */\nfunction compareOrdinal(left: string, right: string): number {\n return left < right ? -1 : left > right ? 1 : 0;\n}\n\n/**\n * `organization` needs a credential of the organization; `personal` is the forwarded token of the\n * person a run acts for.\n */\nfunction fitsHeadlessUse(\n headlessUse: McpHeadlessUse,\n authMode: McpAuthMode,\n connectionScope: McpConnectionScope = 'organization',\n customModes: readonly McpCustomAuthMode[] = []\n): boolean {\n const custom = customModes.find(item => item.mode === authMode);\n const personal = custom ? custom.ownership === 'person' : authMode === 'forward-user-token' || (authMode === 'oauth' && connectionScope === 'user');\n return headlessUse === 'never'\n || (headlessUse === 'organization' && !personal)\n || (headlessUse === 'personal' && personal);\n}\n\n/** Whose credential an authentication mode the application registered sends; null for a built-in mode. */\nfunction customOwnership(scenario: NhAssistantMockScenario, authMode: McpAuthMode): McpCustomAuthMode['ownership'] | null {\n return scenario.admin?.mcpAuthModes?.find(item => item.mode === authMode)?.ownership ?? null;\n}\n\n/** A body the server can read as a server at all; its fields are checked one by one afterwards. */\nfunction isServerInput(input: McpServerInput | undefined): input is McpServerInput {\n return !!input && typeof input === 'object' && typeof input.isEnabled === 'boolean';\n}\n\n/**\n * The field errors of a server's own fields, as the server reports them: `id` (invalid, too-long),\n * `displayName` (required, too-long), `url` (required, invalid, too-long), `authMode`, `headerName`,\n * `transport` and `headlessUse` (invalid) and `requiredPolicy` (invalid, not-found).\n */\nfunction checkServerFields(\n input: McpServerInput,\n stored: StoredServer | null,\n policies: readonly string[] | undefined,\n add: AddFieldError,\n customModes: readonly McpCustomAuthMode[]\n): void {\n if (typeof input.id !== 'string' || (stored === null && !mockDashCase.test(input.id))) {\n add('id', 'invalid');\n } else if (input.id.length > maxServerId) {\n add('id', 'too-long');\n }\n\n if (typeof input.displayName !== 'string' || input.displayName.trim().length === 0) {\n add('displayName', 'required');\n } else if (input.displayName.length > maxDisplayName) {\n add('displayName', 'too-long');\n }\n\n if (typeof input.url !== 'string' || input.url.trim().length === 0) {\n add('url', 'required');\n } else if (input.url.length > maxUrl) {\n add('url', 'too-long');\n } else if (!allowedServerUrl(input.url)) {\n add('url', 'invalid');\n }\n\n if (!authModes.includes(input.authMode) && !customModes.some(item => item.mode === input.authMode)) {\n add('authMode', 'invalid');\n }\n const header = input.headerName?.trim() ?? '';\n if (input.authMode === 'api-key' && header.length > 0 && !headerName.test(header)) {\n add('headerName', 'invalid');\n }\n if (input.transport !== undefined && input.transport !== null && !transports.includes(input.transport)) {\n add('transport', 'invalid');\n }\n\n // An omitted headless use or connection scope keeps the stored value, as on the server.\n const headlessUse = input.headlessUse ?? stored?.server.headlessUse ?? 'never';\n const connectionScope = input.connectionScope ?? stored?.server.connectionScope ?? 'organization';\n if (!headlessUses.includes(headlessUse) || !fitsHeadlessUse(headlessUse, input.authMode, connectionScope, customModes)) {\n add('headlessUse', 'invalid');\n }\n\n const policy = input.requiredPolicy;\n if (policy !== null && policy !== undefined) {\n if (typeof policy !== 'string' || policy.trim().length === 0 || policy.length > maxPolicy) {\n add('requiredPolicy', 'invalid');\n } else if (policies !== undefined && !policies.includes(policy)) {\n add('requiredPolicy', 'not-found');\n }\n }\n}\n\nfunction allowedServerUrl(value: string): boolean {\n try {\n const url = new URL(value);\n return url.protocol === 'https:' || (url.protocol === 'http:' && url.hostname === 'localhost');\n } catch {\n return false;\n }\n}\n\nfunction toTool({ inputSchemaHash, ...tool }: McpTool & { inputSchemaHash: string }): McpTool {\n return tool;\n}\n\nfunction toTools(stored: StoredServer): McpTool[] {\n return [...stored.tools.values()].map(toTool);\n}\n\nfunction kebab(value: string): string {\n return value\n .replace(/([a-z0-9])([A-Z])/g, '$1-$2')\n .replace(/[^A-Za-z0-9]+/g, '-')\n .replace(/^-+|-+$/g, '')\n .toLowerCase();\n}\n","import {\n AdminAgent,\n AdminAgentInput,\n AgentHandOffs,\n AgentShadowVariants,\n CodeHandOff,\n DataHandOff,\n DataHandOffRequest,\n HandOffCeiling\n} from '@newheap/platform-ai-chat';\nimport { NhAssistantMockAdminScenario, NhAssistantMockHandOffRule } from './nh-assistant-mock.models';\nimport { NhAssistantMockResult, mockDashCase, mockFailure as failure, mockMaxStateReason as maxReason, mockSnapshot } from './nh-assistant-mock-admin-shared';\nimport { mockWorksOnCovers } from './nh-assistant-mock-works-on';\n\n/** What the hand-offs and variants read of the mock's agents and their run configuration. */\nexport interface NhAssistantMockHandOffAgents {\n find(agentId: string): AdminAgent | undefined;\n all(): AdminAgent[];\n /** An agent in code has a run configuration; one created in the administration once it has run settings. */\n isConfigured(agent: AdminAgent): boolean;\n}\n\nconst maxHandOffs = 20;\nconst maxSources = 20;\nconst maxDescription = 500;\nconst maxPerDay = 100;\nconst defaultPerDay = 5;\nconst defaultVariants = 3;\n\n/**\n * In-memory hand-offs defined as data and shadow variants of the mock API (S9), within the scenario's\n * `handOffsAsData` and `shadowVariantsAsData` as the ceilings in code: saving checks a hand-off as the\n * server checks it on every save and load, and `GET` reports a stored hand-off that no longer fits,\n * for example after its source lost its run settings, out of effect with its problem. A data variant\n * is created with `POST admin/agents` and `shadowOf`, which `shadowVariantRefusal` checks.\n */\nexport class NhAssistantMockHandOffs {\n private readonly stored = new Map<string, DataHandOff & { agentId: string }>();\n\n constructor(\n private readonly scenario: NhAssistantMockAdminScenario,\n private readonly agents: NhAssistantMockHandOffAgents,\n private readonly now: () => string\n ) {\n }\n\n /**\n * A copy of the hand-offs defined as data; the returned function puts it back, for an import of\n * an agent package that fails as a whole and for its preview.\n */\n snapshot(): () => void {\n return mockSnapshot(this.stored);\n }\n\n /**\n * `GET admin/agents/{id}/hand-offs`, `PUT` and `DELETE admin/agents/{id}/hand-offs/{subjectType}`\n * and `GET admin/agents/{id}/shadow-variants`; `segments` start after the agent id. `null` for\n * another route.\n */\n handle(method: string, agentId: string, segments: string[], body: unknown, query: URLSearchParams): NhAssistantMockResult | null {\n const [area, subjectType] = segments;\n if (area === 'shadow-variants' && segments.length === 1) {\n const agent = this.agents.find(agentId);\n if (!agent) {\n return failure('assistant-agent-not-found');\n }\n return method === 'GET' ? { status: 200, body: this.variantsOf(agent) } : { status: 405 };\n }\n if (area !== 'hand-offs' || segments.length > 2) {\n return null;\n }\n\n const agent = this.agents.find(agentId);\n if (!agent) {\n return failure('assistant-agent-not-found');\n }\n if (subjectType === undefined) {\n return method === 'GET' ? { status: 200, body: this.handOffsOf(agent) } : { status: 405 };\n }\n if (method === 'PUT') {\n return this.save(agent, subjectType, body as DataHandOffRequest | undefined);\n }\n if (method === 'DELETE') {\n return this.remove(agent, subjectType, query);\n }\n return { status: 405 };\n }\n\n /** Whether the agent accepts a hand-off defined as data, which keeps its run settings in use. */\n acceptsDataHandOffs(agentId: string): boolean {\n return [...this.stored.values()].some(handOff => handOff.agentId === agentId);\n }\n\n /**\n * Why `input` may not create a data shadow variant, as `POST admin/agents` with `shadowOf` answers,\n * or `null`.\n */\n shadowVariantRefusal(input: AdminAgentInput): NhAssistantMockResult | null {\n const liveId = input.shadowOf ?? null;\n if (liveId === null) {\n return null;\n }\n if (liveId === input.id) {\n return failure('assistant-validation', { shadowOf: ['invalid'] });\n }\n const live = this.agents.find(liveId);\n if (!this.allowsVariantsOf(liveId, live)) {\n return failure('assistant-shadow-variants-not-allowed');\n }\n if (!live || !this.agents.isConfigured(live)) {\n return failure('assistant-validation', { shadowOf: ['not-found'] });\n }\n if (!isLive(live)) {\n return failure('assistant-validation', { shadowOf: ['invalid'] });\n }\n return this.dataVariantsOf(liveId).length >= this.maxVariants()\n ? failure('assistant-configuration-limit')\n : null;\n }\n\n private handOffsOf(agent: AdminAgent): AgentHandOffs {\n return {\n agentId: agent.id,\n codeHandOffs: this.codeHandOffsOf(agent.id),\n dataHandOffs: [...this.stored.values()]\n .filter(item => item.agentId === agent.id)\n .sort((first, second) => first.subjectType.localeCompare(second.subjectType))\n .map(({ agentId, ...item }) => {\n const problem = this.problemOf(agent, item.subjectType, item.sources, item.maxPerSubjectPerDay);\n return { ...item, inEffect: problem === null, problem };\n }),\n ceiling: this.ceilingOf(agent),\n configured: this.agents.isConfigured(agent)\n };\n }\n\n private save(agent: AdminAgent, subjectType: string, request: DataHandOffRequest | undefined): NhAssistantMockResult {\n const ceiling = this.ceilingOf(agent);\n if (!ceiling) {\n return failure('assistant-handoffs-not-allowed');\n }\n if (this.codeHandOffsOf(agent.id).some(item => item.subjectType === subjectType)) {\n return failure('assistant-handoff-in-code');\n }\n if (!this.agents.isConfigured(agent)) {\n return failure('assistant-agent-not-configured');\n }\n\n const sources = Array.isArray(request?.sources) ? request!.sources.map(source => String(source).trim()) : [];\n const description = typeof request?.description === 'string' && request.description.trim().length > 0 ? request.description.trim() : null;\n const limit = request?.maxPerSubjectPerDay ?? Math.min(defaultPerDay, ceiling.maxPerSubjectPerDay);\n const reason = typeof request?.reason === 'string' && request.reason.trim().length > 0 ? request.reason.trim() : null;\n const errors: Record<string, string[]> = {};\n if (sources.length === 0) {\n errors['sources'] = ['required'];\n } else if (sources.length > maxSources) {\n errors['sources'] = ['too-long'];\n } else if (sources.some(source => !mockDashCase.test(source)) || new Set(sources).size !== sources.length || sources.includes(agent.id)) {\n errors['sources'] = ['invalid'];\n }\n if (description !== null && description.length > maxDescription) {\n errors['description'] = ['too-long'];\n }\n if (!Number.isInteger(limit) || limit < 1 || limit > maxPerDay) {\n errors['maxPerSubjectPerDay'] = ['invalid'];\n }\n if (reason !== null && reason.length > maxReason) {\n errors['reason'] = ['too-long'];\n }\n if (Object.keys(errors).length > 0) {\n return failure('assistant-validation', errors);\n }\n\n // The same check as every load, refused here instead of left out of effect.\n const problem = this.problemOf(agent, subjectType, sources, limit);\n switch (problem) {\n case null:\n break;\n case 'outside-ceiling':\n return failure('assistant-validation', ceiling.subjectTypes.some(item => item.subjectType === subjectType)\n ? { sources: ['not-allowed'] }\n : { subjectType: ['not-allowed'] });\n case 'unknown-source':\n return failure('assistant-validation', { sources: ['not-found'] });\n case 'not-worked-on':\n return failure('assistant-validation', { subjectType: ['invalid'] });\n case 'limit-above-ceiling':\n return failure('assistant-validation', { maxPerSubjectPerDay: ['not-allowed'] });\n default:\n return failure('assistant-validation', { sources: ['invalid'] });\n }\n\n const key = `${agent.id}/${subjectType}`;\n const existing = this.stored.get(key);\n if ((existing?.version ?? null) !== (request?.expectedVersion ?? null)) {\n return failure('assistant-version-conflict');\n }\n if (!existing && [...this.stored.values()].filter(item => item.agentId === agent.id).length >= maxHandOffs) {\n return failure('assistant-configuration-limit');\n }\n\n const now = this.now();\n const saved: DataHandOff & { agentId: string } = {\n agentId: agent.id,\n subjectType,\n version: (existing?.version ?? 0) + 1,\n sources,\n description,\n notifySource: request?.notifySource === true,\n maxPerSubjectPerDay: limit,\n toolId: `assistant.handoff.${agent.id}.${subjectType}`,\n changedAt: now,\n changedBy: 'current-user',\n reason,\n inEffect: true,\n problem: null,\n createdAt: existing?.createdAt ?? now,\n createdBy: existing?.createdBy ?? 'current-user'\n };\n this.stored.set(key, saved);\n const { agentId, ...body } = saved;\n return { status: 200, body };\n }\n\n private remove(agent: AdminAgent, subjectType: string, query: URLSearchParams): NhAssistantMockResult {\n if (this.codeHandOffsOf(agent.id).some(item => item.subjectType === subjectType)) {\n return failure('assistant-handoff-in-code');\n }\n const key = `${agent.id}/${subjectType}`;\n const existing = this.stored.get(key);\n if (!existing) {\n return failure('assistant-handoff-not-found');\n }\n const expected = query.get('expectedVersion');\n if (expected !== null && Number(expected) !== existing.version) {\n return failure('assistant-version-conflict');\n }\n this.stored.delete(key);\n return { status: 204 };\n }\n\n /**\n * The problem a hand-off would have, as the server checks it on save and on every load: a ceiling\n * that connects the agent about the type, a type it works on, sources with a run configuration\n * that the ceiling allows, and a limit within the ceiling's.\n */\n private problemOf(agent: AdminAgent, subjectType: string, sources: readonly string[], limit: number): string | null {\n const rules = this.rulesFor(agent, subjectType);\n if (!this.scenario.handOffsAsData) {\n return 'outside-ceiling';\n }\n if (!this.agents.isConfigured(agent)) {\n return 'unknown-agent';\n }\n if (this.codeHandOffsOf(agent.id).some(item => item.subjectType === subjectType)) {\n return 'conflicts-with-code';\n }\n if (!mockWorksOnCovers(agent, subjectType)) {\n return 'not-worked-on';\n }\n const known = sources.map(source => this.agents.find(source));\n if (known.some(source => !source || !this.agents.isConfigured(source))) {\n return 'unknown-source';\n }\n if (known.some(source => !rules.some(rule => this.allowsSource(rule, source!)))) {\n return 'outside-ceiling';\n }\n return limit > this.maxPerDay() ? 'limit-above-ceiling' : null;\n }\n\n private ceilingOf(agent: AdminAgent): HandOffCeiling | null {\n const rules = (this.scenario.handOffsAsData?.rules ?? []).filter(rule => this.allowsTarget(rule, agent));\n if (rules.length === 0) {\n return null;\n }\n const configured = this.agents.all().filter(candidate => candidate.id !== agent.id && this.agents.isConfigured(candidate));\n const types = [...new Set(rules.map(rule => rule.subjectType))].sort();\n return {\n subjectTypes: types.map(subjectType => {\n const forType = rules.filter(rule => rule.subjectType === subjectType);\n return {\n subjectType,\n sources: configured.filter(candidate => forType.some(rule => this.allowsSource(rule, candidate))).map(candidate => candidate.id).sort(),\n sourcesCreatedInAdministration: forType.some(rule => rule.fromAgentsCreatedInAdministration === true)\n };\n }),\n maxPerSubjectPerDay: this.maxPerDay(),\n maxHandOffs,\n maxSources,\n maxDescriptionLength: maxDescription\n };\n }\n\n private rulesFor(agent: AdminAgent, subjectType: string): NhAssistantMockHandOffRule[] {\n return (this.scenario.handOffsAsData?.rules ?? []).filter(rule => rule.subjectType === subjectType && this.allowsTarget(rule, agent));\n }\n\n private allowsTarget(rule: NhAssistantMockHandOffRule, agent: AdminAgent): boolean {\n return (rule.to ?? []).includes(agent.id) || (rule.toAgentsCreatedInAdministration === true && agent.source === 'admin');\n }\n\n private allowsSource(rule: NhAssistantMockHandOffRule, agent: AdminAgent): boolean {\n return (rule.from ?? []).includes(agent.id) || (rule.fromAgentsCreatedInAdministration === true && agent.source === 'admin');\n }\n\n private maxPerDay(): number {\n return this.scenario.handOffsAsData?.maxPerSubjectPerDay ?? maxPerDay;\n }\n\n private codeHandOffsOf(agentId: string): CodeHandOff[] {\n const agent = (this.scenario.agents ?? []).find(item => item.id === agentId && item.source === 'code');\n return (agent?.codeHandOffs ?? []).map(item => ({\n subjectType: item.subjectType,\n sources: [...item.sources],\n description: item.description ?? null,\n notifySource: item.notifySource ?? false,\n maxPerSubjectPerDay: item.maxPerSubjectPerDay ?? defaultPerDay,\n toolId: `assistant.handoff.${agentId}.${item.subjectType}`\n }));\n }\n\n private variantsOf(live: AdminAgent): AgentShadowVariants {\n const all = this.agents.all();\n const code = all.filter(agent => agent.source === 'code' && agent.shadowOf === live.id);\n const data = this.dataVariantsOf(live.id);\n const allowed = this.allowsVariantsOf(live.id, live) && this.agents.isConfigured(live) && isLive(live);\n return {\n agentId: live.id,\n allowsDataVariants: allowed,\n maxDataVariants: allowed ? this.maxVariants() : 0,\n variants: [\n ...code.map(agent => ({\n agentId: agent.id, displayName: agent.displayName, source: 'code' as const, hasRunSettings: true, inEffect: true, problem: null, version: agent.version\n })),\n ...data.map(agent => {\n const hasRunSettings = this.agents.isConfigured(agent);\n return {\n agentId: agent.id, displayName: agent.displayName, source: 'data' as const, hasRunSettings, inEffect: hasRunSettings, problem: null, version: agent.version\n };\n })\n ]\n };\n }\n\n private dataVariantsOf(liveId: string): AdminAgent[] {\n return this.agents.all()\n .filter(agent => agent.source === 'admin' && agent.shadowOf === liveId)\n .sort((first, second) => first.id.localeCompare(second.id));\n }\n\n private allowsVariantsOf(liveId: string, live: AdminAgent | undefined): boolean {\n const ceiling = this.scenario.shadowVariantsAsData;\n return ceiling !== undefined\n && ((ceiling.of ?? []).includes(liveId) || (ceiling.ofAgentsCreatedInAdministration === true && (live?.source ?? 'admin') === 'admin'));\n }\n\n private maxVariants(): number {\n return this.scenario.shadowVariantsAsData?.maxPerAgent ?? defaultVariants;\n }\n}\n\n/** A live agent: no shadow variant and not in shadow by its code. */\nfunction isLive(agent: AdminAgent): boolean {\n return !agent.shadowOf && !(agent.source === 'code' && agent.shadow?.configured === true);\n}\n","import {\n AdminAgent,\n AgentAccountability,\n ApprovalPolicySummary,\n CodeConsultation,\n ConsultationCeiling,\n ConsultationSubjectRole,\n DataConsultation,\n DataConsultationRequest,\n NhAssistantConsultationRoute,\n RunConfigurationProblem,\n ToolCatalogEntry\n} from '@newheap/platform-ai-chat';\nimport { NhAssistantMockAdminAgent, NhAssistantMockConsultationCeiling } from './nh-assistant-mock.models';\nimport { NhAssistantMockResult, mockFailure as failure, mockHashText as hashText, mockMaxStateReason as maxReason, mockSnapshot } from './nh-assistant-mock-admin-shared';\nimport { mockSystemSubjectType, mockWorksOnCovers } from './nh-assistant-mock-works-on';\n\n/** What the consultations read of the mock's agents, their run configuration and the run catalog. */\nexport interface NhAssistantMockConsultationRules {\n find(agentId: string): AdminAgent | undefined;\n /** Every agent, to tell which of them select a consultation's tool. */\n all(): AdminAgent[];\n /** The subject types with an access resolver: the scenario's types and the whole application. */\n knownSubjectTypes(): string[];\n /** An agent in code has a run configuration; one created in the administration once it has run settings. */\n isConfigured(agent: AdminAgent): boolean;\n /** Whom the agent answers to, from its run settings as data or its code; `null` while it has none. */\n accountabilityOf(agent: AdminAgent): AgentAccountability | null;\n /** The agent's own approval policy; `null` for the platform's default. */\n approvalPolicyOf(agent: AdminAgent): string | null;\n approvalPolicies(): string[];\n approvalPolicySummaries(): ApprovalPolicySummary[];\n /** The policies administrators may choose as the asker policy, by name. */\n agentPolicyNames(): string[];\n}\n\n/** A consultation defined as data as the mock stores it. */\ninterface StoredConsultation {\n agentId: string;\n subjectType: string;\n version: number;\n description: string;\n instructions: string | null;\n minimumRole: ConsultationSubjectRole;\n askerPolicy: string | null;\n routes: NhAssistantConsultationRoute[];\n proposalRole: ConsultationSubjectRole;\n proposalPolicy: string | null;\n /** The tool selection as saved; `null` offers every tool of the agent. */\n toolSelectors: string[] | null;\n maxToolCalls: number;\n timeoutSeconds: number;\n maxAnswerChars: number;\n maxHistoryMessages: number;\n allowRequests: boolean;\n exposeToMcp: boolean;\n dataClassification: DataConsultation['dataClassification'];\n /** Switched off: not offered until an administrator switches it on. */\n off: boolean;\n createdAt: string;\n createdBy: string;\n changedAt: string;\n changedBy: string;\n reason: string | null;\n}\n\n/** What is in effect of a stored consultation: nothing with the problem that keeps it out, or the parts that still fit. */\ninterface ConsultationCheck {\n inEffect: boolean;\n problems: string[];\n routes: NhAssistantConsultationRoute[];\n allowRequests: boolean;\n /** The selectors the agent's own still cover; `null` offers every tool, empty none. */\n toolSelectors: string[] | null;\n}\n\n/** The bounds of `AllowConsultation`, within which a ceiling may only lower the maxima. */\nconst bounds = {\n toolCalls: { min: 0, max: 32, initial: 4 },\n timeoutSeconds: { min: 1, max: 600, initial: 60 },\n answerChars: { min: 200, max: 32_000, initial: 4_000 },\n history: { min: 0, max: 200, initial: 20 }\n} as const;\n\nconst maxDescription = 1_000;\nconst maxInstructions = 4_000;\nconst maxConsultations = 20;\nconst roles: readonly ConsultationSubjectRole[] = ['reader', 'participant', 'approver'];\nconst allRoutes: readonly NhAssistantConsultationRoute[] = ['asker-decides', 'subject-agent-rights', 'subject-asker-rights'];\nconst classifications = ['public', 'internal', 'confidential', 'restricted'];\nconst subjectTypePattern = /^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/;\n/** A tool id or a prefix ending in `.*`, as an agent's tool selectors are. */\nconst selectorPattern = /^[a-z0-9]+(?:-[a-z0-9]+)*(?:\\.[a-z0-9]+(?:-[a-z0-9]+)*)*(?:\\.\\*)?$/;\n\n/**\n * Consultations of the mock API's agents: those in code from the scenario, read-only, and those\n * defined as data, saved and removed as on the server within the ceilings in code\n * (`consultationsAsData` for the application, `consultableAsData` for an agent in code). A save\n * checks a consultation as the server does and refuses with the same codes and field errors; every\n * read checks it again, so a consultation that no longer fits, for example after the run settings\n * changed whom the agent answers to or the agent's own tools no longer cover its tool selection,\n * stays with its problems. Data consultations in effect generate their consult and request tools in\n * the tool list and count for the agent's route switches. A new consultation starts off when its\n * request or the ceiling says so (`startsOff`); one that is off is checked as every read checks it but\n * offers nothing until `POST .../state` switches it on.\n */\nexport class NhAssistantMockConsultations {\n private readonly stored = new Map<string, StoredConsultation>();\n private readonly codeAllowed = new Map<string, Partial<Record<NhAssistantConsultationRoute, string[]>>>();\n private readonly codeDescriptions = new Map<string, Record<string, string>>();\n private readonly codeTools = new Map<string, Record<string, string[]>>();\n private readonly agentCeilings = new Map<string, NhAssistantMockConsultationCeiling>();\n\n /** The application's ceiling; `null` while consultations exist in code only. */\n readonly applicationCeiling: ConsultationCeiling | null;\n\n constructor(\n application: NhAssistantMockConsultationCeiling | undefined,\n agents: readonly NhAssistantMockAdminAgent[],\n private readonly rules: NhAssistantMockConsultationRules,\n private readonly now: () => string\n ) {\n this.applicationCeiling = application ? ceilingOf(application) : null;\n for (const agent of agents) {\n if (agent.source !== 'code') {\n continue;\n }\n if (agent.consultations !== undefined || agent.consultationDescriptions !== undefined) {\n this.codeAllowed.set(agent.id, agent.consultations ?? {});\n this.codeDescriptions.set(agent.id, agent.consultationDescriptions ?? {});\n this.codeTools.set(agent.id, agent.consultationTools ?? {});\n }\n if (agent.consultableAsData !== undefined) {\n this.agentCeilings.set(agent.id, agent.consultableAsData);\n }\n }\n }\n\n /**\n * The ceiling of the agent: the application's for an agent created in the administration, the\n * application's and its own together for a consultable agent in code, none otherwise.\n */\n ceilingOf(agent: AdminAgent): ConsultationCeiling | null {\n const application = this.applicationCeiling;\n if (!application) {\n return null;\n }\n if (agent.source === 'admin') {\n return application;\n }\n const own = this.agentCeilings.get(agent.id);\n if (!own) {\n return null;\n }\n const narrowed = ceilingOf(own);\n return {\n ...application,\n routes: application.routes.filter(route => narrowed.routes.includes(route)),\n allowRequests: application.allowRequests && narrowed.allowRequests,\n allowMcp: application.allowMcp && narrowed.allowMcp,\n maxToolCalls: Math.min(application.maxToolCalls, narrowed.maxToolCalls),\n maxTimeoutSeconds: Math.min(application.maxTimeoutSeconds, narrowed.maxTimeoutSeconds),\n maxAnswerChars: Math.min(application.maxAnswerChars, narrowed.maxAnswerChars),\n maxHistoryMessages: Math.min(application.maxHistoryMessages, narrowed.maxHistoryMessages),\n ...(application.startsOff === true || narrowed.startsOff === true ? { startsOff: true } : {})\n };\n }\n\n /** The agent's consultations in code, by subject type. */\n codeConsultations(agent: AdminAgent): CodeConsultation[] {\n const allowed = this.codeAllowed.get(agent.id);\n if (!allowed) {\n return [];\n }\n const descriptions = this.codeDescriptions.get(agent.id) ?? {};\n const tools = this.codeTools.get(agent.id) ?? {};\n const types = new Set([...Object.values(allowed).flat(), ...Object.keys(descriptions)]);\n return [...types].sort().map(subjectType => {\n const consultToolId = consultToolOf(agent.id, subjectType);\n return {\n subjectType,\n description: descriptions[subjectType] ?? null,\n allowedRoutes: allRoutes.filter(route => (allowed[route] ?? []).includes(subjectType)),\n allowRequests: false,\n exposure: ['local', 'agent'],\n consultToolId,\n requestToolId: null,\n askingAgents: this.askersOf(agent.id, consultToolId),\n toolSelectors: tools[subjectType] ? [...tools[subjectType]] : null\n };\n });\n }\n\n /** The agent's consultations defined as data, by subject type, each with what is in effect of it. */\n dataConsultations(agent: AdminAgent): DataConsultation[] {\n return this.storedOf(agent.id).map(stored => this.toConsultation(agent, stored));\n }\n\n /** The problems of kind `consultation` of the agent's data consultations. */\n problems(agent: AdminAgent): RunConfigurationProblem[] {\n return this.storedOf(agent.id).flatMap(stored => this.check(agent, stored).problems.map(code => ({\n agentId: agent.id,\n kind: 'consultation' as const,\n id: stored.subjectType,\n code\n })));\n }\n\n /** The agent's data consultations in effect with their routes in effect, for its route switches. */\n inEffect(agentId: string): { subjectType: string; routes: NhAssistantConsultationRoute[] }[] {\n const agent = this.rules.find(agentId);\n if (!agent) {\n return [];\n }\n return this.storedOf(agentId)\n .map(stored => ({ subjectType: stored.subjectType, check: this.check(agent, stored) }))\n .filter(item => item.check.inEffect)\n .map(item => ({ subjectType: item.subjectType, routes: item.check.routes }));\n }\n\n /** Whether data consultations belong to the agent, which keeps its run settings. */\n has(agentId: string): boolean {\n return this.storedOf(agentId).length > 0;\n }\n\n /** The generated tools of the data consultations in effect, as `GET admin/tools` lists them. */\n tools(): ToolCatalogEntry[] {\n const tools: ToolCatalogEntry[] = [];\n for (const stored of [...this.stored.values()].sort((left, right) => key(left.agentId, left.subjectType).localeCompare(key(right.agentId, right.subjectType)))) {\n const agent = this.rules.find(stored.agentId);\n const check = agent ? this.check(agent, stored) : null;\n if (!check?.inEffect) {\n continue;\n }\n tools.push({ id: consultToolOf(stored.agentId, stored.subjectType), source: 'local', effect: 'read-only', description: stored.description, subjectType: null });\n if (check.allowRequests) {\n tools.push({ id: requestToolOf(stored.agentId, stored.subjectType), source: 'local', effect: 'idempotent-mutation', description: stored.description, subjectType: null });\n }\n }\n return tools;\n }\n\n /**\n * A copy of the consultations defined as data; the returned function puts it back, for an import\n * of an agent package that fails as a whole and for its preview.\n */\n snapshot(): () => void {\n return mockSnapshot(this.stored);\n }\n\n /** `PUT` and `DELETE admin/agents/{id}/consultations/{subjectType}`, and `POST .../state`. */\n handle(method: string, agent: AdminAgent, subjectType: string, body: unknown, query: URLSearchParams, action?: string): NhAssistantMockResult {\n if (action === 'state') {\n return method === 'POST' ? this.setState(agent, subjectType, body) : { status: 405 };\n }\n if (method === 'DELETE') {\n return this.remove(agent, subjectType, query);\n }\n return method === 'PUT' ? this.save(agent, subjectType, body) : { status: 405 };\n }\n\n private save(agent: AdminAgent, subjectType: string, body: unknown): NhAssistantMockResult {\n const request = (body ?? {}) as DataConsultationRequest;\n const reason = text(request.reason);\n if (reason !== null && reason.length > maxReason) {\n return failure('assistant-validation', { reason: ['too-long'] });\n }\n const ceiling = this.ceilingOf(agent);\n if (!ceiling) {\n return failure('assistant-consultations-not-allowed');\n }\n if (!this.rules.isConfigured(agent)) {\n return failure('assistant-agent-not-configured');\n }\n if (this.inCode(agent.id, subjectType)) {\n return failure('assistant-consultation-in-code');\n }\n\n // A new consultation starts with the defaults of code, capped by the ceiling.\n const description = text(request.description);\n const instructions = text(request.instructions);\n const minimumRole = (text(request.minimumRole) ?? 'reader') as ConsultationSubjectRole;\n const proposalRole = (text(request.proposalRole) ?? 'participant') as ConsultationSubjectRole;\n const routes = (request.routes ?? []).map(route => (typeof route === 'string' ? route.trim() : '')) as NhAssistantConsultationRoute[];\n // No selection, or an empty one, offers every tool of the agent.\n const toolSelectors = Array.isArray(request.toolSelectors) && request.toolSelectors.length > 0\n ? request.toolSelectors.map(selector => (typeof selector === 'string' ? selector.trim() : ''))\n : null;\n const classification = text(request.dataClassification);\n const limits = {\n maxToolCalls: request.maxToolCalls ?? Math.min(bounds.toolCalls.initial, ceiling.maxToolCalls),\n timeoutSeconds: request.timeoutSeconds ?? Math.min(bounds.timeoutSeconds.initial, ceiling.maxTimeoutSeconds),\n maxAnswerChars: request.maxAnswerChars ?? Math.min(bounds.answerChars.initial, ceiling.maxAnswerChars),\n maxHistoryMessages: request.maxHistoryMessages ?? Math.min(bounds.history.initial, ceiling.maxHistoryMessages)\n };\n const errors: Record<string, string[]> = {};\n const add = (field: string, code: string): void => {\n errors[field] = [...(errors[field] ?? []), code];\n };\n if (!subjectTypePattern.test(subjectType)) {\n add('subjectType', 'invalid');\n }\n if (description === null) {\n add('description', 'required');\n } else if (description.length > maxDescription) {\n add('description', 'too-long');\n }\n if ((instructions ?? '').length > maxInstructions) {\n add('instructions', 'too-long');\n }\n if (!roles.includes(minimumRole)) {\n add('minimumRole', 'invalid');\n }\n if (!roles.includes(proposalRole)) {\n add('proposalRole', 'invalid');\n }\n if (!validRoutes(routes)) {\n add('routes', 'invalid');\n }\n if (toolSelectors !== null && !validSelectors(toolSelectors)) {\n add('toolSelectors', 'invalid');\n }\n if (!within(limits.maxToolCalls, bounds.toolCalls)\n || !within(limits.timeoutSeconds, bounds.timeoutSeconds)\n || !within(limits.maxAnswerChars, bounds.answerChars)\n || !within(limits.maxHistoryMessages, bounds.history)) {\n add('limits', 'invalid');\n }\n if (classification !== null && !classifications.includes(classification)) {\n add('dataClassification', 'invalid');\n }\n // Only a new consultation starts off; one that exists keeps whether it is on.\n if (request.startsOff === true && request.expectedVersion != null) {\n add('startsOff', 'invalid');\n }\n if (Object.keys(errors).length > 0) {\n return failure('assistant-validation', errors);\n }\n\n const existing = this.stored.get(key(agent.id, subjectType));\n const now = this.now();\n const row: StoredConsultation = {\n agentId: agent.id,\n subjectType,\n version: (existing?.version ?? 0) + 1,\n description: description!,\n instructions,\n minimumRole,\n askerPolicy: text(request.askerPolicy),\n routes,\n proposalRole,\n proposalPolicy: text(request.proposalPolicy),\n toolSelectors,\n ...limits,\n allowRequests: request.allowRequests === true,\n exposeToMcp: request.exposeToMcp === true,\n dataClassification: classification as DataConsultation['dataClassification'],\n off: existing ? existing.off : request.startsOff === true || ceiling.startsOff === true,\n createdAt: existing?.createdAt ?? now,\n createdBy: existing?.createdBy ?? 'current-user',\n changedAt: now,\n changedBy: 'current-user',\n reason\n };\n\n // The same check as every read, refused here instead of degraded.\n const check = this.check(agent, row);\n if (check.problems.length > 0) {\n return fieldFailure(check.problems);\n }\n if (request.expectedVersion == null && !existing && this.storedOf(agent.id).length >= maxConsultations) {\n return failure('assistant-configuration-limit');\n }\n if ((request.expectedVersion ?? null) !== (existing?.version ?? null)) {\n return failure('assistant-version-conflict');\n }\n\n this.stored.set(key(agent.id, subjectType), row);\n return { status: 200, body: this.toConsultation(agent, row) };\n }\n\n /** `POST admin/agents/{id}/consultations/{subjectType}/state`: on or off, without a new version. */\n private setState(agent: AdminAgent, subjectType: string, body: unknown): NhAssistantMockResult {\n const request = body as { state?: unknown; reason?: unknown } | undefined;\n if (request?.state !== 'on' && request?.state !== 'off') {\n return failure('assistant-validation', { state: [request?.state === undefined ? 'required' : 'invalid'] });\n }\n if (typeof request.reason === 'string' && request.reason.trim().length > maxReason) {\n return failure('assistant-validation', { reason: ['too-long'] });\n }\n if (this.inCode(agent.id, subjectType)) {\n return failure('assistant-consultation-in-code');\n }\n const existing = this.stored.get(key(agent.id, subjectType));\n if (!existing) {\n return failure('assistant-consultation-not-found');\n }\n\n const off = request.state === 'off';\n if (existing.off !== off) {\n existing.off = off;\n existing.changedAt = this.now();\n existing.changedBy = 'current-user';\n existing.reason = typeof request.reason === 'string' && request.reason.trim().length > 0 ? request.reason.trim() : null;\n }\n return { status: 200, body: this.toConsultation(agent, existing) };\n }\n\n private remove(agent: AdminAgent, subjectType: string, query: URLSearchParams): NhAssistantMockResult {\n const reason = query.get('reason');\n if (reason !== null && reason.trim().length > maxReason) {\n return failure('assistant-validation', { reason: ['too-long'] });\n }\n if (this.inCode(agent.id, subjectType)) {\n return failure('assistant-consultation-in-code');\n }\n const existing = this.stored.get(key(agent.id, subjectType));\n if (!existing) {\n return failure('assistant-consultation-not-found');\n }\n const expected = query.get('expectedVersion');\n if (expected !== null && Number(expected) !== existing.version) {\n return failure('assistant-version-conflict');\n }\n\n this.stored.delete(key(agent.id, subjectType));\n return { status: 204 };\n }\n\n /**\n * Checks a consultation against the ceilings and the agent as the server does on save and on every\n * load: out of effect when the agent may get none, the type is unknown or not worked on or the\n * asker policy is no longer listed; otherwise without the routes, requests and MCP exposure that\n * no longer fit and with limits capped at the ceiling, each with a problem.\n */\n private check(agent: AdminAgent, row: StoredConsultation): ConsultationCheck {\n const out = (problem: string): ConsultationCheck => ({ inEffect: false, problems: [problem], routes: [], allowRequests: false, toolSelectors: [] });\n const ceiling = this.ceilingOf(agent);\n if (!ceiling) {\n return out('not-consultable');\n }\n if (!this.rules.knownSubjectTypes().includes(row.subjectType)) {\n return out('unknown-subject-type');\n }\n if (!mockWorksOnCovers(agent, row.subjectType)) {\n return out('not-worked-on');\n }\n if (this.inCode(agent.id, row.subjectType)) {\n return out('conflicts-with-code');\n }\n if (row.askerPolicy !== null && !this.rules.agentPolicyNames().includes(row.askerPolicy)) {\n return out('unknown-agent-policy');\n }\n\n const problems: string[] = [];\n const addOnce = (problem: string): void => {\n if (!problems.includes(problem)) {\n problems.push(problem);\n }\n };\n const accountability = this.rules.accountabilityOf(agent);\n let kept: NhAssistantConsultationRoute[] = [];\n for (const route of row.routes) {\n const agentRights = route === 'subject-agent-rights';\n if (!ceiling.routes.includes(route) || (agentRights && row.subjectType === mockSystemSubjectType)) {\n addOnce('route-not-allowed');\n continue;\n }\n if (agentRights && accountability === 'subject-responsible') {\n addOnce('agent-answers-to-person');\n continue;\n }\n // An agent created here that answers for itself has no grants; one in code is assumed to have them.\n if (agentRights && agent.source === 'admin' && accountability === 'agent') {\n addOnce('agent-has-no-rights');\n continue;\n }\n kept.push(route);\n }\n\n if (row.proposalPolicy !== null && !this.rules.approvalPolicies().includes(row.proposalPolicy)) {\n // Without its policy nobody knows who decides a proposal: the consultation only answers.\n addOnce('unknown-policy');\n kept = [];\n }\n const policies = [row.proposalPolicy, this.rules.approvalPolicyOf(agent)].filter((policy): policy is string => policy !== null);\n if (kept.includes('subject-agent-rights') && policies.some(policy => this.namesOnlyTheInitiator(policy))) {\n addOnce('no-approver');\n kept = kept.filter(route => route !== 'subject-agent-rights');\n }\n let allowRequests = row.allowRequests;\n if (allowRequests && !ceiling.allowRequests) {\n problems.push('requests-not-allowed');\n allowRequests = false;\n }\n if (row.exposeToMcp && !ceiling.allowMcp) {\n problems.push('mcp-not-allowed');\n }\n if (row.maxToolCalls > ceiling.maxToolCalls\n || row.timeoutSeconds > ceiling.maxTimeoutSeconds\n || row.maxAnswerChars > ceiling.maxAnswerChars\n || row.maxHistoryMessages > ceiling.maxHistoryMessages) {\n problems.push('limit-above-ceiling');\n }\n // The selection only narrows the agent's own tools; one they no longer cover drops, and a\n // selection with none left offers no tools, never every tool of the agent.\n let toolSelectors: string[] | null = null;\n if (row.toolSelectors !== null) {\n toolSelectors = row.toolSelectors.filter(selector => agent.toolSelectors.some(own => selectorCovers(own, selector)));\n if (toolSelectors.length < row.toolSelectors.length) {\n problems.push('tools-not-allowed');\n }\n }\n // Off, it is checked as every read checks it, and offers nothing until it is switched on.\n return row.off\n ? { inEffect: false, problems, routes: [], allowRequests: false, toolSelectors: [] }\n : { inEffect: true, problems, routes: kept, allowRequests, toolSelectors };\n }\n\n private namesOnlyTheInitiator(policy: string): boolean {\n const summary = this.rules.approvalPolicySummaries().find(item => item.name === policy);\n return summary !== undefined && summary.approvers.length > 0 && summary.approvers.every(approver => approver.kind === 'initiator');\n }\n\n private toConsultation(agent: AdminAgent, row: StoredConsultation): DataConsultation {\n const check = this.check(agent, row);\n const consultToolId = consultToolOf(agent.id, row.subjectType);\n const { agentId, ...stored } = row;\n return {\n ...stored,\n routes: [...row.routes],\n toolSelectors: row.toolSelectors ? [...row.toolSelectors] : null,\n toolSelectorsInEffect: check.toolSelectors ? [...check.toolSelectors] : null,\n instructionsHash: row.instructions === null ? null : hashText(row.instructions),\n inEffect: check.inEffect,\n problem: check.problems[0] ?? null,\n problems: check.problems,\n routesInEffect: check.routes,\n consultToolId,\n requestToolId: check.allowRequests ? requestToolOf(agent.id, row.subjectType) : null,\n askingAgents: this.askersOf(agent.id, consultToolId)\n };\n }\n\n /** The other agents whose tool selectors select the tool now, by id: the consultation's second key. */\n private askersOf(agentId: string, toolId: string): string[] {\n return this.rules.all()\n .filter(agent => agent.id !== agentId && agent.toolSelectors.some(selector => covers(selector, toolId)))\n .map(agent => agent.id)\n .sort();\n }\n\n private inCode(agentId: string, subjectType: string): boolean {\n const allowed = this.codeAllowed.get(agentId);\n return allowed !== undefined\n && (Object.values(allowed).some(types => types?.includes(subjectType)) || subjectType in (this.codeDescriptions.get(agentId) ?? {}));\n }\n\n private storedOf(agentId: string): StoredConsultation[] {\n return [...this.stored.values()]\n .filter(stored => stored.agentId === agentId)\n .sort((left, right) => left.subjectType.localeCompare(right.subjectType));\n }\n}\n\n/** A ceiling of the scenario with the defaults of the ceiling builder. */\nfunction ceilingOf(ceiling: NhAssistantMockConsultationCeiling): ConsultationCeiling {\n return {\n routes: [...(ceiling.routes ?? [])],\n allowRequests: ceiling.allowRequests ?? false,\n allowMcp: ceiling.allowMcp ?? false,\n maxToolCalls: ceiling.maxToolCalls ?? bounds.toolCalls.max,\n maxTimeoutSeconds: ceiling.maxTimeoutSeconds ?? bounds.timeoutSeconds.max,\n maxAnswerChars: ceiling.maxAnswerChars ?? bounds.answerChars.max,\n maxHistoryMessages: ceiling.maxHistoryMessages ?? bounds.history.max,\n maxConsultations,\n maxInstructionsLength: maxInstructions,\n // Reported only when the application lets new consultations start off, as older servers omit it.\n ...(ceiling.startsOff === true ? { startsOff: true } : {})\n };\n}\n\n/** The field error of each problem a consultation would have, as the server maps them on save. */\nfunction fieldFailure(problems: readonly string[]): NhAssistantMockResult {\n if (problems.includes('not-consultable')) {\n return failure('assistant-consultations-not-allowed');\n }\n if (problems.includes('conflicts-with-code')) {\n return failure('assistant-consultation-in-code');\n }\n const fields: Record<string, [string, string]> = {\n 'unknown-subject-type': ['subjectType', 'not-found'],\n 'not-worked-on': ['subjectType', 'invalid'],\n 'unknown-agent-policy': ['askerPolicy', 'not-found'],\n 'route-not-allowed': ['routes', 'not-allowed'],\n 'agent-answers-to-person': ['routes', 'invalid'],\n 'agent-has-no-rights': ['routes', 'invalid'],\n 'unknown-policy': ['proposalPolicy', 'not-found'],\n 'no-approver': ['proposalPolicy', 'invalid'],\n 'limit-above-ceiling': ['limits', 'not-allowed'],\n 'requests-not-allowed': ['allowRequests', 'not-allowed'],\n 'mcp-not-allowed': ['exposeToMcp', 'not-allowed'],\n 'tools-not-allowed': ['toolSelectors', 'not-allowed']\n };\n const errors: Record<string, string[]> = {};\n for (const problem of problems) {\n const [field, code] = fields[problem] ?? ['subjectType', 'invalid'];\n errors[field] = [...(errors[field] ?? []), code];\n }\n return failure('assistant-validation', errors);\n}\n\n/** Known routes, each once, and at most one of the two routes at the subject. */\nfunction validRoutes(routes: readonly string[]): boolean {\n return routes.every(route => (allRoutes as readonly string[]).includes(route))\n && new Set(routes).size === routes.length\n && !(routes.includes('subject-agent-rights') && routes.includes('subject-asker-rights'));\n}\n\n/** Valid selectors, each once. */\nfunction validSelectors(selectors: readonly string[]): boolean {\n return selectors.every(selector => selector.length <= 128 && selectorPattern.test(selector))\n && new Set(selectors).size === selectors.length;\n}\n\n/** The agent's selector covers a consultation's selector: the same tool, or a prefix that includes it. */\nfunction selectorCovers(agentSelector: string, selector: string): boolean {\n return agentSelector === selector || (agentSelector.endsWith('.*') && selector.startsWith(agentSelector.slice(0, -1)));\n}\n\nfunction within(value: number, range: { min: number; max: number }): boolean {\n return Number.isInteger(value) && value >= range.min && value <= range.max;\n}\n\nfunction consultToolOf(agentId: string, subjectType: string): string {\n return `assistant.consult.${agentId}.${subjectType}`;\n}\n\nfunction requestToolOf(agentId: string, subjectType: string): string {\n return `assistant.request.${agentId}.${subjectType}`;\n}\n\n/** The agent's selector covers the tool: the same tool, or a pattern with `*` that matches it. */\nfunction covers(selector: string, toolId: string): boolean {\n const pattern = selector.split('*').map(part => part.replace(/[.+?^${}()|[\\]\\\\]/g, '\\\\$&')).join('.*');\n return new RegExp(`^${pattern}$`).test(toolId);\n}\n\nfunction key(agentId: string, subjectType: string): string {\n return `${agentId}/${subjectType}`;\n}\n\nfunction text(value: string | null | undefined): string | null {\n return typeof value === 'string' && value.trim().length > 0 ? value.trim() : null;\n}\n","import {\n InstructionAssetList,\n InstructionAssetProblem,\n InstructionAssetReference,\n InstructionAssetText\n} from '@newheap/platform-ai-chat';\nimport { NhAssistantMockResult, mockDashCase, mockFailure as failure, mockHashText as hashText, mockMaxInstructions } from './nh-assistant-mock-admin-shared';\nimport { NhAssistantMockInstructionAsset } from './nh-assistant-mock.models';\n\n/**\n * The application's text assets of the mock API, as its `INhAiTextAssetSource` would supply them:\n * `GET admin/instruction-assets` lists them without content and `GET admin/instruction-assets/{id}/versions/{version}`\n * reads one. A skill version or an agent created in the administration that names one is checked as\n * the server checks it: the asset must exist with the hash the request names. `setAsset` and\n * `removeAsset` change the assets afterwards, so a reference that no longer resolves shows its problem\n * (`asset-changed`, `asset-missing`), as after the server's next load. Without `instructionAssets` in\n * the scenario the application offers none and the run catalog says so.\n */\nexport class NhAssistantMockInstructionAssets {\n private readonly assets = new Map<string, NhAssistantMockInstructionAsset>();\n\n constructor(assets: readonly NhAssistantMockInstructionAsset[] | undefined) {\n this.supported = assets !== undefined;\n for (const asset of assets ?? []) {\n this.assets.set(keyOf(asset.assetId, asset.version), { ...asset });\n }\n }\n\n /** Whether the scenario's application registers a text asset source. */\n readonly supported: boolean;\n\n /** Publishes or changes one version of an asset. */\n setAsset(asset: NhAssistantMockInstructionAsset): void {\n this.assets.set(keyOf(asset.assetId, asset.version), { ...asset });\n }\n\n /** Removes one version of an asset. */\n removeAsset(assetId: string, version: number): void {\n this.assets.delete(keyOf(assetId, version));\n }\n\n /** `admin/instruction-assets[/{id}/versions/{version}]`; `segments` start after `instruction-assets`. */\n handle(method: string, segments: string[]): NhAssistantMockResult {\n if (method !== 'GET') {\n return { status: 405 };\n }\n if (segments.length === 0) {\n const list: InstructionAssetList = {\n supported: this.supported,\n assets: [...this.assets.values()].map(asset => ({\n assetId: asset.assetId,\n version: asset.version,\n hash: hashText(asset.content),\n replacedByAssetId: asset.replacedByAssetId ?? null,\n deprecatedAt: asset.deprecatedAt ?? null\n }))\n };\n return { status: 200, body: list };\n }\n const [assetId, versions, version] = segments;\n const asset = segments.length === 3 && versions === 'versions' ? this.assets.get(keyOf(assetId, Number(version))) : undefined;\n if (!this.supported || !asset) {\n return failure('assistant-instructions-asset-not-found');\n }\n const text: InstructionAssetText = {\n assetId: asset.assetId,\n version: asset.version,\n hash: hashText(asset.content),\n content: asset.content,\n problem: null\n };\n return { status: 200, body: text };\n }\n\n /**\n * Adds the field errors of a reference a save names, as the server does: `instructionsAsset`\n * `not-allowed` without a source, `invalid` for a malformed reference, `not-found` for a missing\n * asset, and `instructionsAsset.hash` `invalid` for another hash.\n */\n check(reference: InstructionAssetReference, errors: Record<string, string[]>): void {\n if (!this.supported) {\n errors['instructionsAsset'] = ['not-allowed'];\n return;\n }\n if (typeof reference.assetId !== 'string' || !mockDashCase.test(reference.assetId) || !Number.isInteger(reference.version) || reference.version < 1) {\n errors['instructionsAsset'] = ['invalid'];\n return;\n }\n const problem = this.problemOf(reference);\n if (problem === 'asset-missing') {\n errors['instructionsAsset'] = ['not-found'];\n } else if (problem === 'asset-changed') {\n errors['instructionsAsset.hash'] = ['invalid'];\n } else if (problem !== null) {\n errors['instructionsAsset'] = ['invalid'];\n }\n }\n\n /** Why the reference does not resolve to its hash now, or `null` when it does. */\n problemOf(reference: InstructionAssetReference): InstructionAssetProblem | null {\n if (!this.supported) {\n return 'no-asset-source';\n }\n const asset = this.assets.get(keyOf(reference.assetId, reference.version));\n if (!asset) {\n return 'asset-missing';\n }\n if (asset.content.trim().length === 0 || asset.content.length > mockMaxInstructions) {\n return 'asset-invalid';\n }\n return hashText(asset.content) === reference.hash ? null : 'asset-changed';\n }\n\n /** The text the reference resolves to, or `null` when it does not resolve. */\n textOf(reference: InstructionAssetReference): string | null {\n return this.problemOf(reference) === null ? this.assets.get(keyOf(reference.assetId, reference.version))!.content : null;\n }\n}\n\nfunction keyOf(assetId: string, version: number): string {\n return `${assetId}@${version}`;\n}\n","import {\n AdminAgent,\n AgentRunConfiguration,\n AssistantDataClassification,\n AgentRunSettings,\n AgentRunSettingsRequest,\n CodeRunSettings,\n CodeTrigger,\n DataSkill,\n DataSkillRequest,\n DataSkillVersion,\n DataSkillVersionStatus,\n DataTrigger,\n DataTriggerRequest,\n DataTriggerVersion,\n FileLimits,\n LowerFileLimits,\n NhAssistantConsultationRoute,\n RunCatalog,\n SkillComparison,\n ToolCatalogEntry,\n TriggerComparison\n} from '@newheap/platform-ai-chat';\nimport { NhAssistantMockAccounts } from './nh-assistant-mock-accounts';\nimport { NhAssistantMockConsultations } from './nh-assistant-mock-consultations';\nimport { NhAssistantMockAdminScenario } from './nh-assistant-mock.models';\nimport { mockSystemSubjectType, mockWorksOnCovers } from './nh-assistant-mock-works-on';\nimport { mockClassificationWarnings, mockFailure as failure, mockSnapshot } from './nh-assistant-mock-admin-shared';\nimport { NhAssistantMockInstructionAssets } from './nh-assistant-mock-instruction-assets';\n\n/** A mock response: status plus optional JSON body. */\ninterface MockResult {\n status: number;\n body?: unknown;\n}\n\n/** What the run configuration reads of the mock's agents and changes in them. */\nexport interface NhAssistantMockRunAgents {\n find(agentId: string): AdminAgent | undefined;\n /** Every agent, to tell which of them select the tool of a consultation. */\n all(): AdminAgent[];\n /** The subject types a consultation can be about: the scenario's types and the whole application. */\n knownSubjectTypes(): string[];\n /**\n * Adds the state of a data skill to the agent, off with `startsOff`, or removes it with\n * `description` `null`.\n */\n setDataSkill(agentId: string, skillId: string, description: string | null, startsOff?: boolean): void;\n /** Whether the agent accepts a hand-off defined as data, which keeps its run settings in use. */\n acceptsDataHandOffs?(agentId: string): boolean;\n}\n\ninterface StoredSkillVersion extends DataSkill {\n status: DataSkillVersionStatus;\n}\n\n/** One version of a data trigger in the mock's history: the live one, a candidate or history. */\ninterface StoredTriggerVersion extends DataTrigger {\n status: DataSkillVersionStatus;\n agentId: string;\n}\n\nconst dashCase = /^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/;\nconst dataClassifications: string[] = ['public', 'internal', 'confidential', 'restricted'];\nconst accountabilities = ['agent', 'subject-responsible', 'service-account'];\nconst conflicts = ['coalesce', 'queue', 'supersede', 'ignore'];\nconst maxDescription = 300;\nconst maxInstructions = 20_000;\nconst maxMessage = 2_000;\nconst maxReason = 500;\n/** A data trigger applies at most this many filters of its event, each named in lowercase dash-case. */\nconst maxTriggerFilters = 10;\nconst filterName = /^[a-z0-9]+(?:-[a-z0-9]+)*$/;\n\n/** The platform's default file limits (`NhAssistantLimits`). */\nconst defaultFileLimits: FileLimits = {\n maxFileBytes: 20 * 1024 * 1024,\n maxFilePages: 100,\n maxFilesPerTurn: 5,\n maxFileTokensPerTurn: 100_000\n};\n\nconst fileLimitFields: readonly (keyof FileLimits)[] = ['maxFileBytes', 'maxFilePages', 'maxFilesPerTurn', 'maxFileTokensPerTurn'];\n\n/**\n * In-memory run configuration as data of the mock API: run settings of agents created in the\n * administration, skills defined as data with versions and candidates, and data triggers. Saving\n * checks the names against the scenario's run catalog as the server checks them against the code;\n * new skills and triggers start in shadow. A schedule without a subject set runs for the whole\n * application and fits only an agent that works on it; a stored trigger that no longer fits what its\n * agent works on stays, out of effect, with the problem `not-worked-on`. Triggers have append-only\n * versions as skills do: a change applies at once or, with `apply` `shadow`, becomes the candidate next\n * to the live version, which the administrator promotes or discards. The mock runs no agents, so a\n * comparison counts nothing.\n */\nexport class NhAssistantMockRunConfiguration {\n private readonly settings = new Map<string, AgentRunSettings>();\n private readonly skills = new Map<string, StoredSkillVersion[]>();\n private readonly triggers = new Map<string, DataTrigger>();\n /** Every version of every data trigger by trigger id, live and candidate included, oldest first. */\n private readonly triggerVersions = new Map<string, StoredTriggerVersion[]>();\n private readonly consultations: NhAssistantMockConsultations;\n private readonly catalog: RunCatalog;\n private readonly codeTriggers: (CodeTrigger & { agentId: string })[];\n /** How the scenario's agents in code run, as their code would say. */\n private readonly codeRunSettings: Map<string, Partial<CodeRunSettings>>;\n /** What each profile and its fallbacks permit, to warn as the server does. */\n private readonly profileClassifications: NhAssistantMockAdminScenario['profileClassifications'];\n\n constructor(\n scenario: NhAssistantMockAdminScenario,\n private readonly agents: NhAssistantMockRunAgents,\n private readonly now: () => string,\n private readonly accounts: NhAssistantMockAccounts = new NhAssistantMockAccounts(scenario),\n private readonly instructionAssets: NhAssistantMockInstructionAssets = new NhAssistantMockInstructionAssets(scenario.instructionAssets)\n ) {\n const approvalPolicies = scenario.runCatalog?.approvalPolicies ?? scenario.policies ?? [];\n this.consultations = new NhAssistantMockConsultations(scenario.consultationsAsData, scenario.agents ?? [], {\n find: agentId => this.agents.find(agentId),\n all: () => this.agents.all(),\n knownSubjectTypes: () => this.agents.knownSubjectTypes(),\n isConfigured: agent => this.isConfigured(agent),\n accountabilityOf: agent => agent.source === 'admin' ? this.settings.get(agent.id)?.accountability ?? null : this.codeSettingsOf(agent).accountability,\n approvalPolicyOf: agent => agent.source === 'admin' ? this.settings.get(agent.id)?.approvalPolicy ?? null : this.codeSettingsOf(agent).approvalPolicy,\n approvalPolicies: () => this.catalog.approvalPolicies,\n approvalPolicySummaries: () => this.catalog.approvalPolicySummaries ?? [],\n agentPolicyNames: () => this.agentPolicyNames\n }, now);\n this.catalog = {\n // A trigger event lists its named filters, none unless the scenario's application registers some.\n triggerEvents: (scenario.runCatalog?.triggerEvents ?? []).map(event => ({ ...event, filters: event.filters ?? [] })),\n subjectSets: scenario.runCatalog?.subjectSets ?? [],\n ruleHandlers: scenario.runCatalog?.ruleHandlers ?? [],\n approvalPolicies,\n profiles: scenario.runCatalog?.profiles ?? [],\n // By default a policy lets the subject's approvers decide within a week, after the run.\n approvalPolicySummaries: scenario.runCatalog?.approvalPolicySummaries ?? approvalPolicies.map(name => ({\n name,\n approvers: [{ kind: 'subject-role', role: 'approver', namedRole: null, policy: null }],\n lifetimeMinutes: 7 * 24 * 60,\n fourEyes: false,\n mode: 'deferred'\n })),\n accountSearch: accounts.searchable,\n agentPolicies: scenario.runCatalog?.agentPolicies ?? [],\n divisions: scenario.runCatalog?.divisions ?? false,\n // The platform's default file limits, unless the scenario's application chose its own.\n fileLimits: scenario.runCatalog?.fileLimits ?? defaultFileLimits,\n consultationCeiling: this.consultations.applicationCeiling,\n instructionAssets: instructionAssets.supported\n };\n this.codeTriggers = (scenario.codeTriggers ?? []).map(trigger => ({\n ...trigger,\n skillId: trigger.skillId ?? null,\n subjectType: trigger.subjectType ?? null\n }));\n this.profileClassifications = scenario.profileClassifications;\n this.codeRunSettings = new Map((scenario.agents ?? [])\n .filter(agent => agent.source === 'code')\n .map(agent => [agent.id, agent.codeRunSettings ?? {}]));\n }\n\n /** The policies administrators may choose as run and view policies, by name. */\n get agentPolicyNames(): string[] {\n return (this.catalog.agentPolicies ?? []).map(policy => policy.name);\n }\n\n /** Whether the scenario lists divisions, so an agent may work per division. */\n get divisionsListed(): boolean {\n return this.catalog.divisions === true;\n }\n\n /** The profiles the run catalog offers to data skills and to agents created in the administration. */\n get profileNames(): string[] {\n return [...this.catalog.profiles];\n }\n\n /**\n * A copy of the run settings, skills, triggers and consultations; the returned function puts it\n * back, for an import of an agent package that fails as a whole and for its preview.\n */\n snapshot(): () => void {\n const restoreOwn = mockSnapshot(this.settings, this.skills, this.triggers, this.triggerVersions);\n const restoreConsultations = this.consultations.snapshot();\n return () => {\n restoreOwn();\n restoreConsultations();\n };\n }\n\n /**\n * The agent's consultations defined as data in effect with their routes in effect, which count for\n * its route switches.\n */\n consultationsInEffect(agentId: string): { subjectType: string; routes: NhAssistantConsultationRoute[] }[] {\n return this.consultations.inEffect(agentId);\n }\n\n /** The generated consult and request tools of the data consultations in effect. */\n consultationTools(): ToolCatalogEntry[] {\n return this.consultations.tools();\n }\n\n /** `GET admin/run-catalog`. */\n runCatalog(method: string): MockResult {\n return method === 'GET' ? { status: 200, body: this.catalog } : { status: 405 };\n }\n\n /**\n * `admin/agents/{id}/configuration`, `run-settings`, `skills/{skillId}[/...]`,\n * `triggers/{triggerId}[/shadow|/versions|/candidate/...]` and `consultations/{subjectType}[/state]`;\n * `segments` start after the agent id.\n */\n handle(method: string, agentId: string, segments: string[], body: unknown, query: URLSearchParams): MockResult | null {\n const agent = this.agents.find(agentId);\n const [area, id, action, child] = segments;\n if (area === 'configuration' && segments.length === 1) {\n return agent && method === 'GET' ? { status: 200, body: this.configuration(agent) } : failure('assistant-agent-not-found');\n }\n if (area === 'run-settings' && segments.length === 1) {\n return agent ? this.runSettings(method, agent, body, query) : failure('assistant-agent-not-found');\n }\n if (area === 'skills' && id !== undefined && (segments.length === 2 || action === 'versions' || action === 'candidate')) {\n if (!agent) {\n return failure('assistant-agent-not-found');\n }\n if (action === 'versions' && segments.length === 3) {\n return method === 'GET' ? { status: 200, body: this.versions(agent.id, id) } : { status: 405 };\n }\n if (action === 'candidate' && segments.length === 4) {\n return this.candidate(method, agent, id, child, body);\n }\n return segments.length === 2 ? this.skill(method, agent, id, body, query) : null;\n }\n if (area === 'triggers' && id !== undefined && (segments.length === 3 && action === 'versions' || segments.length === 4 && action === 'candidate')) {\n if (!agent) {\n return failure('assistant-agent-not-found');\n }\n return action === 'versions'\n ? method === 'GET' ? { status: 200, body: this.triggerHistory(agent.id, id) } : { status: 405 }\n : this.triggerCandidate(method, agent, id, child, body);\n }\n if (area === 'triggers' && id !== undefined && (segments.length === 2 || (segments.length === 3 && action === 'shadow'))) {\n if (!agent) {\n return failure('assistant-agent-not-found');\n }\n return action === 'shadow' ? this.triggerShadow(method, agent, id, body) : this.trigger(method, agent, id, body, query);\n }\n if (area === 'consultations' && id !== undefined && (segments.length === 2 || (segments.length === 3 && action === 'state'))) {\n return agent ? this.consultations.handle(method, agent, id, body, query, action) : failure('assistant-agent-not-found');\n }\n return null;\n }\n\n private configuration(agent: AdminAgent): AgentRunConfiguration {\n const dataSkills = this.liveSkills(agent.id);\n const dataSkillIds = new Set(dataSkills.map(skill => skill.skillId));\n const dataTriggers = [...this.triggers.values()]\n .filter(trigger => this.ownerOf(trigger) === agent.id)\n .map(trigger => {\n const problem = this.triggerProblem(agent, trigger);\n const live = problem ? { ...withoutOwner(trigger), inEffect: false, problem } : withoutOwner(trigger);\n const candidate = this.candidateOf(trigger.triggerId);\n return { ...live, candidate: candidate ? this.candidateDto(agent, candidate) : null };\n });\n return {\n agentId: agent.id,\n toolSelectors: [...agent.toolSelectors],\n codeSkills: agent.source === 'code'\n ? (agent.skills ?? []).filter(skill => !dataSkillIds.has(skill.skillId)).map(skill => ({ skillId: skill.skillId, description: skill.description }))\n : [],\n dataSkills,\n codeTriggers: this.codeTriggers.filter(trigger => trigger.agentId === agent.id).map(({ agentId, ...trigger }) => trigger),\n dataTriggers,\n problems: [\n ...dataSkills\n .flatMap(skill => [{ kind: 'skill' as const, skill }, ...(skill.candidate ? [{ kind: 'candidate' as const, skill: skill.candidate }] : [])])\n .filter(entry => entry.skill.instructionsAsset && entry.skill.problem !== null)\n .map(entry => ({ agentId: agent.id, kind: entry.kind, id: entry.skill.skillId, code: entry.skill.problem! })),\n ...dataTriggers\n .filter(trigger => trigger.problem !== null)\n .map(trigger => ({ agentId: agent.id, kind: 'trigger' as const, id: trigger.triggerId, code: trigger.problem! })),\n ...dataTriggers\n .filter(trigger => trigger.candidate && trigger.candidate.problem !== null)\n .map(trigger => ({ agentId: agent.id, kind: 'trigger-candidate' as const, id: trigger.triggerId, code: trigger.candidate!.problem! })),\n ...this.consultations.problems(agent)\n ],\n source: agent.source,\n runSettings: agent.source === 'admin' ? this.settings.get(agent.id) ?? null : null,\n codeRunSettings: agent.source === 'code' ? this.codeSettingsOf(agent) : null,\n codeConsultations: this.consultations.codeConsultations(agent),\n dataConsultations: this.consultations.dataConsultations(agent),\n consultationCeiling: this.consultations.ceilingOf(agent)\n };\n }\n\n /**\n * How an agent in code runs: the scenario's `codeRunSettings`, answering to its technical account\n * when it has one and to itself otherwise, as an agent in code does by default.\n */\n private codeSettingsOf(agent: AdminAgent): CodeRunSettings {\n const given = this.codeRunSettings.get(agent.id) ?? {};\n return {\n accountability: given.accountability ?? (agent.serviceAccount ? 'service-account' : 'agent'),\n delegateFromInitiator: given.delegateFromInitiator ?? false,\n approvalPolicy: given.approvalPolicy ?? null,\n usesRules: given.usesRules ?? false,\n startsOff: given.startsOff ?? false,\n acceptsFiles: given.acceptsFiles ?? false\n };\n }\n\n /**\n * Why a stored trigger no longer fits what its agent works on, as the server reads it: an event\n * that names a type the agent does not work on, or a schedule for the whole application of an\n * agent that does not work on it.\n */\n private triggerProblem(agent: AdminAgent, trigger: DataTrigger): string | null {\n if (trigger.source === 'event') {\n const event = this.catalog.triggerEvents.find(item => item.name === trigger.event);\n if (event?.subjectType && !mockWorksOnCovers(agent, event.subjectType)) {\n return 'not-worked-on';\n }\n // A filter the event no longer offers keeps the trigger from firing.\n const offered = (event?.filters ?? []).map(filter => filter.name);\n return (trigger.filters ?? []).some(name => !offered.includes(name)) ? 'unknown-filter' : null;\n }\n return trigger.subjectSet === null && !mockWorksOnCovers(agent, mockSystemSubjectType) ? 'not-worked-on' : null;\n }\n\n private runSettings(method: string, agent: AdminAgent, body: unknown, query: URLSearchParams): MockResult {\n if (agent.source === 'code') {\n return failure('assistant-run-settings-in-code');\n }\n const current = this.settings.get(agent.id);\n if (method === 'DELETE') {\n if (!current) {\n return failure('assistant-agent-not-configured');\n }\n if (!versionMatches(query, current.version)) {\n return failure('assistant-version-conflict');\n }\n if (this.liveSkills(agent.id).length > 0\n || [...this.triggers.values()].some(trigger => this.ownerOf(trigger) === agent.id)\n || this.consultations.has(agent.id)\n || this.agents.acceptsDataHandOffs?.(agent.id)) {\n return failure('assistant-run-settings-in-use');\n }\n this.settings.delete(agent.id);\n return { status: 204 };\n }\n if (method !== 'PUT') {\n return { status: 405 };\n }\n\n const request = (body ?? {}) as AgentRunSettingsRequest;\n const serviceAccount = text(request.serviceAccountActorId);\n const errors: Record<string, string[]> = {};\n if (!accountabilities.includes(request.accountability)) {\n errors['accountability'] = [request.accountability ? 'invalid' : 'required'];\n }\n if ((request.accountability === 'service-account') !== (serviceAccount !== null)) {\n errors['serviceAccountActorId'] = [serviceAccount === null ? 'required' : 'invalid'];\n }\n if (request.allowGatewayReads && request.accountability === 'agent') {\n errors['allowGatewayReads'] = ['invalid'];\n }\n if (!inRange(request.retryCount, 0, 10)) {\n errors['retryCount'] = ['invalid'];\n }\n if (!inRange(request.maxConcurrentRuns, 1, 100)) {\n errors['maxConcurrentRuns'] = ['invalid'];\n }\n if (!inRange(request.maxRunsPerSubjectPerDay, 1, 1_000)) {\n errors['maxRunsPerSubjectPerDay'] = ['invalid'];\n }\n if (!budgetValid(request.dailyToolCalls, request.dailyTokens)) {\n errors['dailyBudget'] = ['invalid'];\n }\n this.requireKnown(errors, 'approvalPolicy', request.approvalPolicy, this.catalog.approvalPolicies);\n this.requireKnown(errors, 'triageProfile', request.triageProfile, this.catalog.profiles);\n this.requireKnown(errors, 'ruleHandler', request.ruleHandler, this.catalog.ruleHandlers.map(handler => handler.name));\n this.requireFileLimits(errors, request.acceptsFiles ?? false, request);\n if (Object.keys(errors).length > 0) {\n return failure('assistant-validation', errors);\n }\n if (serviceAccount && this.accounts.rejects(serviceAccount)) {\n return failure('assistant-service-account-not-found');\n }\n if ((request.expectedVersion ?? null) !== (current?.version ?? null)) {\n return failure('assistant-version-conflict');\n }\n\n const saved: AgentRunSettings = {\n version: (current?.version ?? 0) + 1,\n accountability: request.accountability,\n serviceAccountActorId: serviceAccount,\n delegateFromInitiator: request.delegateFromInitiator ?? false,\n allowGatewayReads: request.allowGatewayReads ?? false,\n elevatedReads: request.elevatedReads ?? 'restricted',\n approvalPolicy: text(request.approvalPolicy),\n retryCount: request.retryCount ?? 3,\n dailyToolCalls: request.dailyToolCalls ?? null,\n dailyTokens: request.dailyTokens ?? null,\n maxConcurrentRuns: request.maxConcurrentRuns ?? 4,\n maxRunsPerSubjectPerDay: request.maxRunsPerSubjectPerDay ?? 10,\n maxTokensPerRun: request.maxTokensPerRun ?? null,\n triageProfile: text(request.triageProfile),\n ruleHandler: text(request.ruleHandler),\n changedAt: this.now(),\n changedBy: 'current-user',\n reason: text(request.reason),\n inEffect: true,\n problem: null,\n acceptsFiles: request.acceptsFiles ?? false,\n ...storedFileLimits(request)\n };\n this.settings.set(agent.id, saved);\n return { status: 200, body: saved };\n }\n\n private skill(method: string, agent: AdminAgent, skillId: string, body: unknown, query: URLSearchParams): MockResult {\n if (agent.source === 'code' && (agent.skills ?? []).some(skill => skill.skillId === skillId) && !this.skills.has(key(agent.id, skillId))) {\n return failure('assistant-skill-in-code');\n }\n if (!this.isConfigured(agent)) {\n return failure('assistant-agent-not-configured');\n }\n const versions = this.skills.get(key(agent.id, skillId)) ?? [];\n const live = versions.find(version => version.status === 'live');\n if (method === 'DELETE') {\n if (!live) {\n return failure('assistant-skill-not-found');\n }\n if (!versionMatches(query, live.version)) {\n return failure('assistant-version-conflict');\n }\n if ([...this.triggers.values()].some(trigger => this.ownerOf(trigger) === agent.id && trigger.skillId === skillId)) {\n return failure('assistant-skill-in-use');\n }\n for (const version of versions) {\n version.status = version.status === 'candidate' ? 'discarded' : version.status === 'live' ? 'superseded' : version.status;\n }\n this.agents.setDataSkill(agent.id, skillId, null);\n return { status: 204 };\n }\n if (method !== 'PUT') {\n return { status: 405 };\n }\n\n const request = (body ?? {}) as DataSkillRequest;\n const description = text(request.description);\n const errors: Record<string, string[]> = {};\n if (!dashCase.test(skillId)) {\n errors['skillId'] = ['invalid'];\n }\n if (description === null) {\n errors['description'] = ['required'];\n } else if (description.length > maxDescription) {\n errors['description'] = ['too-long'];\n }\n if ((request.instructions ?? '').length > maxInstructions) {\n errors['instructions'] = ['too-long'];\n }\n // A version takes its instructions from an asset of the application or has text of its own.\n const instructionsAsset = request.instructionsAsset ?? null;\n if (instructionsAsset !== null) {\n if (text(request.instructions) !== null) {\n errors['instructions'] = ['not-allowed'];\n }\n this.instructionAssets.check(instructionsAsset, errors);\n }\n if ((request.tools ?? []).some(tool => !agent.toolSelectors.some(selector => covers(selector, tool)))) {\n errors['tools'] = ['invalid'];\n }\n if (!inRange(request.maxTokensPerRun, 1, Number.MAX_SAFE_INTEGER)) {\n errors['maxTokensPerRun'] = ['invalid'];\n }\n if (!budgetValid(request.dailyToolCalls, request.dailyTokens)) {\n errors['dailyBudget'] = ['invalid'];\n }\n if (request.apply === 'shadow' && (request.expectedVersion ?? null) === null) {\n errors['apply'] = ['invalid'];\n }\n // Only a new skill starts off; a skill that exists keeps its state.\n if (request.startsOff === true && (request.expectedVersion ?? null) !== null) {\n errors['startsOff'] = ['invalid'];\n }\n const classification = text(request.dataClassification);\n if (classification !== null && !dataClassifications.includes(classification)) {\n errors['dataClassification'] = ['invalid'];\n }\n this.requireKnown(errors, 'profile', request.profile, this.catalog.profiles);\n this.requireKnown(errors, 'ruleHandler', request.ruleHandler, this.catalog.ruleHandlers.map(handler => handler.name));\n this.requireKnown(errors, 'approvalPolicy', request.approvalPolicy, this.catalog.approvalPolicies);\n this.requireFileLimits(errors, request.acceptsFiles ?? false, request);\n if (Object.keys(errors).length > 0) {\n return failure('assistant-validation', errors);\n }\n if ((request.expectedVersion ?? null) !== (live?.version ?? null)) {\n return failure('assistant-version-conflict');\n }\n\n const candidate = request.apply === 'shadow';\n for (const version of versions) {\n if (version.status === 'candidate') {\n version.status = 'discarded';\n } else if (version.status === 'live' && !candidate) {\n version.status = 'superseded';\n }\n }\n const instructions = instructionsAsset === null ? text(request.instructions) : null;\n const saved: StoredSkillVersion = {\n skillId,\n version: versions.reduce((latest, version) => Math.max(latest, version.version), 0) + 1,\n status: candidate ? 'candidate' : 'live',\n description: description!,\n instructions,\n instructionsHash: instructionsAsset?.hash ?? (instructions === null ? null : hashText(instructions)),\n instructionsAsset: instructionsAsset === null\n ? null\n : { assetId: instructionsAsset.assetId, version: instructionsAsset.version, hash: instructionsAsset.hash },\n tools: [...new Set(request.tools ?? [])],\n profile: text(request.profile),\n dataClassification: classification as AssistantDataClassification | null,\n acceptsFiles: request.acceptsFiles ?? false,\n ...storedFileLimits(request),\n ruleHandler: text(request.ruleHandler),\n maxTokensPerRun: request.maxTokensPerRun ?? null,\n dailyToolCalls: request.dailyToolCalls ?? null,\n dailyTokens: request.dailyTokens ?? null,\n approvalPolicy: text(request.approvalPolicy),\n changedAt: this.now(),\n changedBy: 'current-user',\n reason: text(request.reason),\n inEffect: true,\n problem: null\n };\n this.skills.set(key(agent.id, skillId), [...versions, saved]);\n if (!candidate) {\n this.agents.setDataSkill(agent.id, skillId, saved.description, live === undefined && request.startsOff === true);\n }\n // A classification that no profile permits never refuses the save; the skill reports it.\n return { status: 200, body: this.withWarnings(agent, toSkill(saved)) };\n }\n\n private candidate(method: string, agent: AdminAgent, skillId: string, action: string | undefined, body: unknown): MockResult {\n const versions = this.skills.get(key(agent.id, skillId)) ?? [];\n const candidate = versions.find(version => version.status === 'candidate');\n const live = versions.find(version => version.status === 'live');\n if (action === 'comparison' && method === 'GET') {\n if (!candidate || !live) {\n return failure('assistant-skill-candidate-not-found');\n }\n const comparison: SkillComparison = {\n agentId: agent.id,\n skillId,\n from: candidate.changedAt,\n to: this.now(),\n live: emptyStats(live.version),\n candidate: emptyStats(candidate.version),\n pairedEvents: 0,\n tools: []\n };\n return { status: 200, body: comparison };\n }\n if ((action !== 'promote' && action !== 'discard') || method !== 'POST') {\n return { status: 405 };\n }\n\n const request = body as { version?: unknown; reason?: unknown } | undefined;\n if (typeof request?.version !== 'number') {\n return failure('assistant-validation', { version: ['required'] });\n }\n if (!candidate) {\n return failure('assistant-skill-candidate-not-found');\n }\n if (candidate.version !== request.version) {\n return failure('assistant-version-conflict');\n }\n if (action === 'discard') {\n candidate.status = 'discarded';\n return { status: 204 };\n }\n\n if (live) {\n live.status = 'superseded';\n }\n candidate.status = 'live';\n this.agents.setDataSkill(agent.id, skillId, candidate.description);\n return { status: 200, body: this.withWarnings(agent, toSkill(candidate)) };\n }\n\n private versions(agentId: string, skillId: string): DataSkillVersion[] {\n return [...(this.skills.get(key(agentId, skillId)) ?? [])]\n .sort((left, right) => right.version - left.version)\n .map(version => ({\n version: version.version,\n status: version.status,\n description: version.description,\n instructionsHash: version.instructionsHash,\n createdAt: version.changedAt,\n createdBy: version.changedBy,\n reason: version.reason,\n instructionsAsset: version.instructionsAsset ?? null\n }));\n }\n\n private trigger(method: string, agent: AdminAgent, triggerId: string, body: unknown, query: URLSearchParams): MockResult {\n if (this.codeTriggers.some(trigger => trigger.triggerId === triggerId)) {\n return failure('assistant-trigger-in-code');\n }\n if (!this.isConfigured(agent)) {\n return failure('assistant-agent-not-configured');\n }\n const existing = this.triggers.get(triggerId);\n if (existing && this.ownerOf(existing) !== agent.id) {\n return failure('assistant-validation', { triggerId: ['invalid'] });\n }\n if (method === 'DELETE') {\n if (!existing) {\n return failure('assistant-trigger-not-found');\n }\n if (!versionMatches(query, existing.version)) {\n return failure('assistant-version-conflict');\n }\n // Out of effect; its versions stay as history.\n for (const version of this.triggerVersions.get(triggerId) ?? []) {\n version.status = version.status === 'live' ? 'superseded' : version.status === 'candidate' ? 'discarded' : version.status;\n }\n this.triggers.delete(triggerId);\n return { status: 204 };\n }\n if (method !== 'PUT') {\n return { status: 405 };\n }\n\n const request = (body ?? {}) as DataTriggerRequest;\n const schedule = request.source === 'schedule';\n const errors: Record<string, string[]> = {};\n if (!dashCase.test(triggerId)) {\n errors['triggerId'] = ['invalid'];\n }\n if (request.source !== 'event' && request.source !== 'schedule') {\n errors['source'] = [request.source ? 'invalid' : 'required'];\n }\n if (request.conflict && !conflicts.includes(request.conflict)) {\n errors['conflict'] = ['invalid'];\n }\n if (!inRange(request.debounceSeconds, 0, 3_600)) {\n errors['debounceSeconds'] = ['invalid'];\n }\n if (request.source === 'event') {\n this.requireKnown(errors, 'event', request.event, this.catalog.triggerEvents.map(item => item.name), true);\n // An event that names its object type up front fits only an agent that works on it.\n const subjectType = this.catalog.triggerEvents.find(item => item.name === text(request.event))?.subjectType;\n if (!errors['event'] && subjectType && !mockWorksOnCovers(agent, subjectType)) {\n errors['event'] = ['invalid'];\n }\n }\n if (schedule) {\n if ((text(request.cron) ?? '').split(' ').filter(field => field.length > 0).length < 5) {\n errors['cron'] = [text(request.cron) === null ? 'required' : 'invalid'];\n }\n if (text(request.subjectSet) !== null) {\n this.requireKnown(errors, 'subjectSet', request.subjectSet, this.catalog.subjectSets.map(item => item.name));\n } else if (!mockWorksOnCovers(agent, mockSystemSubjectType)) {\n // Without a subject set the schedule runs for the whole application, which only an agent\n // that works on it may do.\n errors['subjectSet'] = ['required'];\n }\n const message = text(request.message);\n if (message === null) {\n errors['message'] = ['required'];\n } else if (message.length > maxMessage) {\n errors['message'] = ['too-long'];\n }\n }\n const skill = text(request.skill);\n if (skill !== null && !this.skillIds(agent).includes(skill)) {\n errors['skill'] = ['not-found'];\n }\n // The filters in the order chosen, each once; only an event trigger takes them.\n const filters = [...new Set((request.filters ?? []).map(name => (typeof name === 'string' ? name.trim() : '')))];\n if (filters.length > maxTriggerFilters || filters.some(name => name.length > 64 || !filterName.test(name)) || (schedule && filters.length > 0)) {\n errors['filters'] = ['invalid'];\n }\n // A new trigger has no live version to evaluate a candidate next to.\n if ((request.apply !== undefined && request.apply !== 'live' && request.apply !== 'shadow')\n || (request.apply === 'shadow' && (request.expectedVersion ?? null) === null)) {\n errors['apply'] = ['invalid'];\n }\n if (Object.keys(errors).length > 0) {\n return failure('assistant-validation', errors);\n }\n if (request.source === 'event') {\n const offered = (this.catalog.triggerEvents.find(item => item.name === text(request.event))?.filters ?? []).map(filter => filter.name);\n if (filters.some(name => !offered.includes(name))) {\n return failure('assistant-trigger-filter-not-found', { filters: ['not-found'] });\n }\n }\n if ((request.expectedVersion ?? null) !== (existing?.version ?? null)) {\n return failure('assistant-version-conflict');\n }\n\n const candidate = request.apply === 'shadow';\n const history = this.triggerVersions.get(triggerId) ?? [];\n const saved: DataTrigger & { agentId?: string } = {\n triggerId,\n skillId: skill,\n source: request.source,\n event: schedule ? null : text(request.event),\n cron: schedule ? text(request.cron) : null,\n timeZone: schedule ? text(request.timeZone) : null,\n subjectSet: schedule ? text(request.subjectSet) : null,\n message: schedule ? text(request.message) : null,\n conflict: request.conflict ?? (schedule ? 'ignore' : 'coalesce'),\n debounceSeconds: schedule ? 0 : request.debounceSeconds ?? 120,\n // A candidate always fires in shadow; a new version keeps the trigger's mode.\n shadow: candidate || (existing?.shadow ?? true),\n version: history.reduce((latest, version) => Math.max(latest, version.version), existing?.version ?? 0) + 1,\n changedAt: this.now(),\n changedBy: 'current-user',\n reason: text(request.reason),\n inEffect: true,\n problem: null,\n filters: schedule ? [] : filters,\n createdAt: this.now(),\n createdBy: 'current-user'\n };\n for (const version of history) {\n if (version.status === 'candidate') {\n version.status = 'discarded';\n } else if (version.status === 'live' && !candidate) {\n version.status = 'superseded';\n }\n }\n if (existing && history.length === 0) {\n // A trigger of the scenario's preset starts its history with its live version.\n history.push({ ...withoutOwner(existing), status: candidate ? 'live' : 'superseded', agentId: agent.id });\n }\n this.triggerVersions.set(triggerId, [...history, { ...withoutOwner(saved), status: candidate ? 'candidate' : 'live', agentId: agent.id }]);\n if (candidate) {\n return { status: 200, body: this.candidateDto(agent, this.candidateOf(triggerId)!) };\n }\n this.triggers.set(triggerId, Object.assign(saved, { [ownerKey]: agent.id }));\n return { status: 200, body: withoutOwner(saved) };\n }\n\n /** `admin/agents/{id}/triggers/{triggerId}/candidate/{promote|discard|comparison}`. */\n private triggerCandidate(method: string, agent: AdminAgent, triggerId: string, action: string | undefined, body: unknown): MockResult {\n const live = this.triggers.get(triggerId);\n const candidate = live && this.ownerOf(live) === agent.id ? this.candidateOf(triggerId) : undefined;\n if (action === 'comparison' && method === 'GET') {\n if (!candidate || !live) {\n return failure('assistant-trigger-candidate-not-found');\n }\n const comparison: TriggerComparison = {\n agentId: agent.id,\n triggerId,\n from: candidate.createdAt ?? candidate.changedAt,\n to: this.now(),\n live: emptyStats(live.version),\n candidate: emptyStats(candidate.version),\n pairedEvents: 0,\n liveOnlyEvents: 0,\n candidateOnlyEvents: 0,\n tools: []\n };\n return { status: 200, body: comparison };\n }\n if ((action !== 'promote' && action !== 'discard') || method !== 'POST') {\n return { status: 405 };\n }\n\n const request = body as { version?: unknown; reason?: unknown } | undefined;\n if (typeof request?.version !== 'number') {\n return failure('assistant-validation', { version: ['required'] });\n }\n if (!candidate || !live) {\n return failure('assistant-trigger-candidate-not-found');\n }\n if (candidate.version !== request.version) {\n return failure('assistant-version-conflict');\n }\n if (action === 'discard') {\n candidate.status = 'discarded';\n return { status: 204 };\n }\n\n for (const version of this.triggerVersions.get(triggerId) ?? []) {\n if (version.status === 'live') {\n version.status = 'superseded';\n }\n }\n candidate.status = 'live';\n // The promoted version keeps working in the trigger's mode.\n const { status, agentId, ...definition } = candidate;\n const promoted: DataTrigger = { ...definition, shadow: live.shadow, changedAt: this.now(), changedBy: 'current-user' };\n candidate.shadow = live.shadow;\n this.triggers.set(triggerId, Object.assign(promoted, { [ownerKey]: agent.id }));\n return { status: 200, body: withoutOwner(promoted) };\n }\n\n /** Every version of a data trigger of the agent, newest first, with its definition. */\n private triggerHistory(agentId: string, triggerId: string): DataTriggerVersion[] {\n return [...(this.triggerVersions.get(triggerId) ?? [])]\n .filter(version => version.agentId === agentId)\n .sort((left, right) => right.version - left.version)\n .map(version => ({\n version: version.version,\n status: version.status,\n skillId: version.skillId,\n source: version.source,\n event: version.event,\n filters: [...(version.filters ?? [])],\n cron: version.cron,\n timeZone: version.timeZone,\n subjectSet: version.subjectSet,\n message: version.message,\n conflict: version.conflict,\n debounceSeconds: version.debounceSeconds,\n createdAt: version.createdAt ?? version.changedAt,\n createdBy: version.createdBy ?? version.changedBy,\n reason: version.reason\n }));\n }\n\n private candidateOf(triggerId: string): StoredTriggerVersion | undefined {\n return (this.triggerVersions.get(triggerId) ?? []).find(version => version.status === 'candidate');\n }\n\n /** A candidate as the server shows it: always in shadow, with its own problem. */\n private candidateDto(agent: AdminAgent, candidate: StoredTriggerVersion): DataTrigger {\n const { status, agentId, ...definition } = candidate;\n const problem = this.triggerProblem(agent, definition);\n return { ...definition, shadow: true, inEffect: problem === null, problem };\n }\n\n private triggerShadow(method: string, agent: AdminAgent, triggerId: string, body: unknown): MockResult {\n if (method !== 'POST') {\n return { status: 405 };\n }\n const existing = this.triggers.get(triggerId);\n if (!existing || this.ownerOf(existing) !== agent.id) {\n return failure('assistant-trigger-not-found');\n }\n const request = body as { mode?: unknown; reason?: unknown } | undefined;\n if (request?.mode !== 'shadow' && request?.mode !== 'live') {\n return failure('assistant-validation', { mode: [request?.mode === undefined ? 'required' : 'invalid'] });\n }\n if (typeof request.reason === 'string' && request.reason.length > maxReason) {\n return failure('assistant-validation', { reason: ['too-long'] });\n }\n\n existing.shadow = request.mode === 'shadow';\n existing.changedAt = this.now();\n existing.changedBy = 'current-user';\n existing.reason = typeof request.reason === 'string' && request.reason.trim().length > 0 ? request.reason.trim() : null;\n return { status: 200, body: withoutOwner(existing) };\n }\n\n /**\n * The ids of the variant's data skills that would move to `live` and the failure of one that cannot,\n * as a promotion with `moveSkills` checks them before anything changes: a skill the live agent has\n * in code stays (`assistant-skill-in-code`).\n */\n skillsToMove(variantId: string, live: AdminAgent): { skillIds: string[]; failure: MockResult | null } {\n const skillIds = this.liveSkills(variantId).map(skill => skill.skillId);\n const inCode = (live.skills ?? []).some(skill => skillIds.includes(skill.skillId) && !this.skills.has(key(live.id, skill.skillId)));\n return { skillIds, failure: inCode ? failure('assistant-skill-in-code') : null };\n }\n\n /**\n * Moves the variant's data skills to `live` as a promotion does: each becomes the next live version\n * of the live agent's skill with the same id, or a new skill, which starts in shadow. Answers the ids\n * that moved, in order, or the failure of the first save.\n */\n moveSkills(variantId: string, live: AdminAgent, reason: string | null): { moved: string[]; failure: MockResult | null } {\n const moved: string[] = [];\n for (const skill of this.liveSkills(variantId)) {\n const current = (this.skills.get(key(live.id, skill.skillId)) ?? []).find(version => version.status === 'live');\n const request: DataSkillRequest = {\n description: skill.description,\n instructions: skill.instructionsAsset ? null : skill.instructions,\n tools: [...skill.tools],\n profile: skill.profile,\n ruleHandler: skill.ruleHandler,\n maxTokensPerRun: skill.maxTokensPerRun,\n dailyToolCalls: skill.dailyToolCalls,\n dailyTokens: skill.dailyTokens,\n approvalPolicy: skill.approvalPolicy,\n expectedVersion: current?.version ?? null,\n reason,\n ...(current ? { apply: 'live' as const } : {}),\n dataClassification: skill.dataClassification ?? null,\n acceptsFiles: skill.acceptsFiles ?? false,\n maxFileBytes: skill.maxFileBytes ?? null,\n maxFilePages: skill.maxFilePages ?? null,\n maxFilesPerTurn: skill.maxFilesPerTurn ?? null,\n maxFileTokensPerTurn: skill.maxFileTokensPerTurn ?? null,\n instructionsAsset: skill.instructionsAsset ?? null\n };\n const saved = this.skill('PUT', live, skill.skillId, request, new URLSearchParams());\n if (saved.status !== 200) {\n return { moved, failure: saved };\n }\n moved.push(skill.skillId);\n }\n return { moved, failure: null };\n }\n\n /** An agent in code has a run configuration; one created in the administration once it has run settings. */\n isConfigured(agent: AdminAgent): boolean {\n return agent.source === 'code' || this.settings.has(agent.id);\n }\n\n private skillIds(agent: AdminAgent): string[] {\n return [...(agent.skills ?? []).map(skill => skill.skillId), ...this.liveSkills(agent.id).map(skill => skill.skillId)];\n }\n\n private liveSkills(agentId: string): DataSkill[] {\n const result: DataSkill[] = [];\n const agent = this.agents.find(agentId);\n for (const [stored, versions] of this.skills) {\n if (!stored.startsWith(`${agentId}/`)) {\n continue;\n }\n const live = versions.find(version => version.status === 'live');\n if (live) {\n const candidate = versions.find(version => version.status === 'candidate');\n result.push({\n ...this.withWarnings(agent, toSkill(live)),\n candidate: candidate ? this.withWarnings(agent, toSkill(candidate)) : null\n });\n }\n }\n return result.sort((left, right) => left.skillId.localeCompare(right.skillId));\n }\n\n /**\n * The skill with the warnings the server reports for it: its classification, or else its agent's,\n * that its profile, or else its agent's, does not permit.\n */\n private withWarnings(agent: AdminAgent | undefined, skill: DataSkill): DataSkill {\n // A version whose asset no longer resolves to its hash is out of effect, as after the server's load.\n const assetProblem = skill.instructionsAsset ? this.instructionAssets.problemOf(skill.instructionsAsset) : null;\n return {\n ...skill,\n ...(assetProblem !== null ? { inEffect: false, problem: assetProblem } : {}),\n warnings: mockClassificationWarnings(\n this.profileClassifications,\n skill.profile ?? agent?.profile,\n skill.dataClassification ?? agent?.dataClassification)\n };\n }\n\n private ownerOf(trigger: DataTrigger): string | undefined {\n return (trigger as unknown as Record<string, string | undefined>)[ownerKey];\n }\n\n private requireKnown(errors: Record<string, string[]>, field: string, value: string | null | undefined, known: string[], required = false): void {\n const name = text(value);\n if (name === null) {\n if (required) {\n errors[field] = ['required'];\n }\n return;\n }\n if (!known.includes(name)) {\n errors[field] = ['not-found'];\n }\n }\n\n /**\n * Lower file limits as the server checks them: each a whole number from 1 to the application's\n * limit, and only next to `acceptsFiles`.\n */\n private requireFileLimits(errors: Record<string, string[]>, acceptsFiles: boolean, request: LowerFileLimits): void {\n const application = this.catalog.fileLimits ?? defaultFileLimits;\n for (const field of fileLimitFields) {\n const value = request[field];\n if (value !== null && value !== undefined && (!acceptsFiles || !inRange(value, 1, application[field]))) {\n errors[field] = ['invalid'];\n }\n }\n }\n}\n\n/** The lower file limits a save stores, `null` where the request keeps the application's. */\nfunction storedFileLimits(request: LowerFileLimits): Required<LowerFileLimits> {\n return {\n maxFileBytes: request.maxFileBytes ?? null,\n maxFilePages: request.maxFilePages ?? null,\n maxFilesPerTurn: request.maxFilesPerTurn ?? null,\n maxFileTokensPerTurn: request.maxFileTokensPerTurn ?? null\n };\n}\n\nconst ownerKey = '__agentId';\n\nfunction key(agentId: string, skillId: string): string {\n return `${agentId}/${skillId}`;\n}\n\nfunction toSkill({ status, ...skill }: StoredSkillVersion): DataSkill {\n return { ...skill, tools: [...skill.tools] };\n}\n\nfunction withoutOwner(trigger: DataTrigger): DataTrigger {\n const { [ownerKey]: owner, ...rest } = trigger as DataTrigger & Record<string, unknown>;\n return { ...rest } as DataTrigger;\n}\n\nfunction emptyStats(version: number): SkillComparison['live'] {\n return { version, runs: 0, completed: 0, failed: 0, proposals: 0, toolCalls: 0, tokens: 0 };\n}\n\nfunction text(value: string | null | undefined): string | null {\n return typeof value === 'string' && value.trim().length > 0 ? value.trim() : null;\n}\n\nfunction inRange(value: number | null | undefined, min: number, max: number): boolean {\n return value === null || value === undefined || (Number.isInteger(value) && value >= min && value <= max);\n}\n\nfunction budgetValid(calls: number | null | undefined, tokens: number | null | undefined): boolean {\n const hasCalls = calls !== null && calls !== undefined;\n const hasTokens = tokens !== null && tokens !== undefined;\n return hasCalls === hasTokens && (!hasCalls || (calls! >= 1 && tokens! >= 1));\n}\n\nfunction versionMatches(query: URLSearchParams, version: number): boolean {\n const expected = query.get('expectedVersion');\n return expected === null || Number(expected) === version;\n}\n\n/** The agent's selector covers the skill's: the same tool, or a prefix selector that includes it. */\nfunction covers(agentSelector: string, skillSelector: string): boolean {\n return agentSelector === skillSelector\n || (agentSelector.endsWith('.*') && skillSelector.startsWith(agentSelector.slice(0, -1)));\n}\n\nfunction hashText(text: string): string {\n let hash = 0x811c9dc5;\n for (let index = 0; index < text.length; index++) {\n hash ^= text.charCodeAt(index);\n hash = Math.imul(hash, 0x01000193) >>> 0;\n }\n return `fnv1a:${hash.toString(16).padStart(8, '0')}`;\n}\n","import {\n AdminAgent,\n AdminAgentInput,\n AgentSummary,\n ApplicationContext,\n ApplicationContextVersion,\n AssistantPreferences,\n McpConnectionStatus,\n NhAssistantMcpAuthorizationOutcome,\n ShadowVariantPromotion,\n ShadowVariantPromotionRequest,\n ToolCatalogEntry\n} from '@newheap/platform-ai-chat';\nimport { NhAssistantMockAdminAgent, NhAssistantMockRemoteTool, NhAssistantMockScenario } from './nh-assistant-mock.models';\nimport { NhAssistantMockAccounts } from './nh-assistant-mock-accounts';\nimport { NhAssistantMockAdminAgents } from './nh-assistant-mock-admin-agents';\nimport { NhAssistantMockAdminMcp } from './nh-assistant-mock-admin-mcp';\nimport { NhAssistantMockHandOffs } from './nh-assistant-mock-hand-offs';\nimport {\n NhAssistantMockResult,\n mockFailure as failure,\n mockHashText as hashText,\n mockMaxInstructions as maxInstructions,\n mockValidationFailure as validationFailure\n} from './nh-assistant-mock-admin-shared';\nimport { NhAssistantMockRunConfiguration } from './nh-assistant-mock-run-configuration';\nimport { NhAssistantMockInstructionAssets } from './nh-assistant-mock-instruction-assets';\nimport { mockSystemSubjectType } from './nh-assistant-mock-works-on';\n\nexport type { NhAssistantMockResult } from './nh-assistant-mock-admin-shared';\n\nconst styles = ['default', 'direct', 'personal', 'detailed'];\nconst addressForms = ['informal', 'formal'];\nconst responseLengths = ['short', 'normal', 'long'];\nconst maxCustomInstructions = 1_000;\n\nconst defaultPreferences: AssistantPreferences = {\n style: 'default',\n addressForm: 'informal',\n responseLength: 'normal',\n customInstructions: null\n};\n\n/**\n * In-memory administration and preference endpoints of the mock API. Routes `admin/*` to its\n * areas: the agents (`nh-assistant-mock-admin-agents`), their run configuration\n * (`nh-assistant-mock-run-configuration`), the MCP servers and the caller's connections\n * (`nh-assistant-mock-admin-mcp`) and the accounts (`nh-assistant-mock-accounts`), and keeps the\n * application context and the caller's preferences itself. Follows the contract rules: secrets are\n * write-only, new MCP tools start disabled as mutations, a changed remote schema disables a tool,\n * and stale versions answer `409`.\n */\nexport class NhAssistantMockAdmin {\n private readonly agents: NhAssistantMockAdminAgents;\n private readonly mcp: NhAssistantMockAdminMcp;\n private readonly accounts: NhAssistantMockAccounts;\n private readonly runConfiguration: NhAssistantMockRunConfiguration;\n private readonly handOffs: NhAssistantMockHandOffs;\n /** The application's text assets for instructions. */\n readonly instructionAssets: NhAssistantMockInstructionAssets;\n private readonly contextVersions: (ApplicationContextVersion & { text: string })[] = [];\n private preferences: AssistantPreferences;\n private canAdminister: boolean;\n\n constructor(private readonly scenario: NhAssistantMockScenario, private readonly now: () => string) {\n const admin = scenario.admin ?? {};\n this.canAdminister = admin.canAdminister ?? true;\n this.preferences = { ...defaultPreferences, ...scenario.preferences };\n\n this.contextVersions.push({ version: 1, hash: hashText(admin.context ?? ''), updatedAt: now(), updatedBy: null, text: admin.context ?? '' });\n this.instructionAssets = new NhAssistantMockInstructionAssets(admin.instructionAssets);\n\n this.agents = new NhAssistantMockAdminAgents(scenario, now, {\n hasServer: serverId => this.mcp.hasServer(serverId),\n agentPolicyNames: () => this.runConfiguration.agentPolicyNames,\n divisionsListed: () => this.runConfiguration.divisionsListed,\n profileNames: () => this.runConfiguration.profileNames,\n dataConsultations: agentId => this.runConfiguration.consultationsInEffect(agentId),\n shadowVariantRefusal: input => this.handOffs.shadowVariantRefusal(input),\n instructionAssets: () => this.instructionAssets\n });\n this.accounts = new NhAssistantMockAccounts(admin);\n this.runConfiguration = new NhAssistantMockRunConfiguration(\n admin,\n {\n find: agentId => this.agents.find(agentId),\n all: () => this.agents.all(),\n knownSubjectTypes: () => [...(scenario.subjectTypes ?? []).map(type => type.id), mockSystemSubjectType],\n setDataSkill: (agentId, skillId, description, startsOff) => this.agents.setDataSkill(agentId, skillId, description, startsOff),\n acceptsDataHandOffs: agentId => this.handOffs.acceptsDataHandOffs(agentId)\n },\n now,\n this.accounts,\n this.instructionAssets);\n this.handOffs = new NhAssistantMockHandOffs(admin, {\n find: agentId => this.agents.find(agentId),\n all: () => this.agents.all(),\n isConfigured: agent => this.runConfiguration.isConfigured(agent)\n }, now);\n this.mcp = new NhAssistantMockAdminMcp(scenario, now, {\n agents: () => this.agents.all(),\n chatAgentIds: () => this.agents.chatAgents().map(agent => agent.id),\n removeServer: serverId => this.agents.removeServer(serverId),\n canAdminister: () => this.canAdminister\n });\n this.presetRunConfigurations(admin.agents ?? []);\n }\n\n get administers(): boolean {\n return this.canAdminister;\n }\n\n setCanAdminister(value: boolean): void {\n this.canAdminister = value;\n }\n\n /** What the mock authorization window answers next. */\n setMcpAuthorizationOutcome(outcome: 'approve' | 'deny' | 'cancel'): void {\n this.mcp.setAuthorizationOutcome(outcome);\n }\n\n /**\n * Simulates what happens to a server's OAuth connections outside the application: the\n * authorization server refused a refresh (`reauthorization-required`), or the server named another\n * authorization server (`issuer-changed`).\n */\n setMcpConnectionStatus(serverId: string, status: Exclude<McpConnectionStatus, 'not-connected' | 'active'>): void {\n this.mcp.setConnectionStatus(serverId, status);\n }\n\n /**\n * Why the caller has to connect a server each person connects to before a turn can use it, or null\n * when the caller's connection is active.\n */\n connectionNeeded(serverId: string): { displayName: string; reason: 'not-connected' | 'reauthorization-required' | 'insufficient-scope' } | null {\n return this.mcp.connectionNeeded(serverId);\n }\n\n /**\n * Plays the callback of a started authorization as the authorization server and the callback page\n * would: the person approves, denies or closes the window.\n */\n authorizeFlow(flowId: string): NhAssistantMcpAuthorizationOutcome {\n return this.mcp.authorizeFlow(flowId);\n }\n\n /** Replaces the tool list of a simulated remote server; the next sync picks it up. */\n setRemoteTools(serverId: string, tools: NhAssistantMockRemoteTool[]): void {\n this.mcp.setRemoteTools(serverId, tools);\n }\n\n /** Chat agents: code agents keep their keys, admin agents carry literal text; stopped agents are left out. */\n chatAgents(): AgentSummary[] {\n return this.agents.chatAgents();\n }\n\n /** Every agent of the administration, also those kept out of the chat, for the agent runs. */\n allAgents(): AdminAgent[] {\n return this.agents.all();\n }\n\n /** One agent of the administration, or `undefined`. */\n findAgent(agentId: string): AdminAgent | undefined {\n return this.agents.find(agentId);\n }\n\n /** The definition in code of an agent in code; `null` for an agent created here. */\n codeDefinition(agentId: string): AdminAgentInput | null {\n return this.agents.codeDefinition(agentId);\n }\n\n /**\n * A copy of the agents and their run configuration, consultations and hand-offs; the returned\n * function puts it back, for an import of an agent package that fails as a whole and for its preview.\n */\n snapshot(): () => void {\n const restores = [this.agents.snapshot(), this.runConfiguration.snapshot(), this.handOffs.snapshot()];\n return () => {\n for (const restore of restores) {\n restore();\n }\n };\n }\n\n /** Makes the next version of an agent, as a change of its metadata does. */\n nextAgentVersion(agentId: string): AdminAgent {\n return this.agents.nextVersion(agentId);\n }\n\n handlePreferences(method: string, body: unknown): NhAssistantMockResult {\n if (method === 'GET') {\n return { status: 200, body: this.preferences };\n }\n if (method !== 'PUT') {\n return { status: 405 };\n }\n\n const input = body as Partial<AssistantPreferences> | undefined;\n const instructions = input?.customInstructions ?? null;\n if (!input || !styles.includes(input.style ?? '') || !addressForms.includes(input.addressForm ?? '') ||\n !responseLengths.includes(input.responseLength ?? '') ||\n (instructions !== null && (typeof instructions !== 'string' || instructions.length > maxCustomInstructions))) {\n return validationFailure();\n }\n\n this.preferences = {\n style: input.style!,\n addressForm: input.addressForm!,\n responseLength: input.responseLength!,\n customInstructions: instructions && instructions.trim().length > 0 ? instructions : null\n };\n return { status: 200, body: this.preferences };\n }\n\n /**\n * `GET mcp-connections` and `PUT mcp-connections/{serverId}`: the caller's consent to background\n * use of servers that run with the caller's own account. A consent holds for the server's address\n * and authentication as they were; a change shows it as not allowed again.\n */\n handleMcpConnections(method: string, segments: string[], body: unknown): NhAssistantMockResult {\n return this.mcp.handleConnections(method, segments, body);\n }\n\n handleAdmin(method: string, segments: string[], body: unknown, query = new URLSearchParams()): NhAssistantMockResult {\n if (!this.canAdminister) {\n return failure('assistant-forbidden');\n }\n\n const [, area, id, action, child] = segments;\n switch (area) {\n case 'context':\n return this.context(method, id, body);\n case 'tools':\n return method === 'GET' && segments.length === 2 ? { status: 200, body: this.toolCatalog() } : failure('assistant-not-found');\n case 'run-catalog':\n return segments.length === 2 ? this.runConfiguration.runCatalog(method) : failure('assistant-not-found');\n case 'instruction-assets':\n return this.instructionAssets.handle(method, segments.slice(2));\n case 'accounts':\n return segments.length === 2 ? this.accounts.search(method, query) : failure('assistant-not-found');\n case 'agents':\n if (id !== undefined && action === 'feedback') {\n return this.agents.agentFeedback(method, id, child, segments.length);\n }\n if (id !== undefined && action === 'evaluation') {\n return this.agents.agentEvaluation(method, id, child, segments.length, query);\n }\n if (id !== undefined && (action === 'replay' || action === 'replays') && segments.length === 4) {\n return this.agents.agentReplay(method, id, action, body);\n }\n if (id !== undefined && action === 'promote' && segments.length === 4) {\n return this.promote(method, id, body);\n }\n if (id !== undefined && (action === 'hand-offs' || action === 'shadow-variants')) {\n const handed = this.handOffs.handle(method, id, segments.slice(3), body, query);\n if (handed) {\n return handed;\n }\n }\n if (id !== undefined && action !== undefined) {\n const configured = this.runConfiguration.handle(method, id, segments.slice(3), body, query);\n if (configured) {\n return configured;\n }\n }\n if (id !== undefined && action === 'skills' && child !== undefined && segments[5] === 'state' && segments.length === 6) {\n return this.agents.skillStateEndpoint(method, id, child, body);\n }\n if (id !== undefined && action === 'skills' && child !== undefined && segments[5] === 'shadow' && segments.length === 6) {\n return this.agents.skillShadowEndpoint(method, id, child, body);\n }\n return this.agents.agentsEndpoint(method, id, action, body, segments.length);\n case 'mcp-servers':\n return this.mcp.serversEndpoint(method, id, action, child, body, segments.length);\n case 'mcp-auth-modes':\n return this.mcp.authModesEndpoint(method, segments.length);\n default:\n return failure('assistant-not-found');\n }\n }\n\n /**\n * `POST admin/agents/{id}/promote`: a data shadow variant's definition becomes its live agent's next\n * version, its skills move along with `moveSkills`, and the variant is deleted, as on the server. A\n * stale version of either agent answers `409`; a skill the live agent has in code stops the promotion\n * before anything changes.\n */\n private promote(method: string, variantId: string, body: unknown): NhAssistantMockResult {\n if (method !== 'POST') {\n return { status: 405 };\n }\n const variant = this.agents.find(variantId);\n if (!variant) {\n return failure('assistant-agent-not-found');\n }\n if (variant.source !== 'admin' || !variant.shadowOf) {\n return failure('assistant-not-shadow-variant');\n }\n const request = body as Partial<ShadowVariantPromotionRequest> | undefined;\n if (typeof request?.expectedVersion !== 'number') {\n return failure('assistant-validation', { expectedVersion: ['required'] });\n }\n if (typeof request.reason === 'string' && request.reason.length > 500) {\n return failure('assistant-validation', { reason: ['too-long'] });\n }\n const live = this.agents.find(variant.shadowOf);\n if (!live) {\n return failure('assistant-agent-not-found');\n }\n if (request.expectedVersion !== live.version\n || (typeof request.expectedVariantVersion === 'number' && request.expectedVariantVersion !== variant.version)) {\n return failure('assistant-version-conflict');\n }\n if (request.moveSkills === true) {\n const refused = this.runConfiguration.skillsToMove(variant.id, live).failure;\n if (refused) {\n return refused;\n }\n }\n\n // In the server's order: the definition, the skills, then the variant leaves.\n const agent = this.agents.promote(variant.id, live.id);\n const moved = request.moveSkills === true\n ? this.runConfiguration.moveSkills(variant.id, agent, typeof request.reason === 'string' ? request.reason.trim() || null : null)\n : { moved: [], failure: null };\n if (moved.failure) {\n return moved.failure;\n }\n this.agents.agentsEndpoint('DELETE', variant.id, undefined, undefined, 3);\n const promotion: ShadowVariantPromotion = { agent: this.agents.find(agent.id)!, variantId: variant.id, movedSkills: moved.moved };\n return { status: 200, body: promotion };\n }\n\n private context(method: string, sub: string | undefined, body: unknown): NhAssistantMockResult {\n const current = this.contextVersions[this.contextVersions.length - 1];\n if (sub === 'versions' && method === 'GET') {\n return { status: 200, body: [...this.contextVersions].reverse().map(({ text, ...version }) => version) };\n }\n if (sub !== undefined) {\n return failure('assistant-not-found');\n }\n if (method === 'GET') {\n return { status: 200, body: toContext(current) };\n }\n if (method !== 'PUT') {\n return { status: 405 };\n }\n\n const input = body as { text?: unknown; expectedVersion?: unknown } | undefined;\n if (typeof input?.text !== 'string' || typeof input.expectedVersion !== 'number') {\n return validationFailure();\n }\n if (input.text.length > maxInstructions) {\n return failure('assistant-instructions-too-long');\n }\n if (input.expectedVersion !== current.version) {\n return failure('assistant-version-conflict');\n }\n\n const next = { version: current.version + 1, hash: hashText(input.text), updatedAt: this.now(), updatedBy: 'current-user', text: input.text };\n this.contextVersions.push(next);\n return { status: 200, body: toContext(next) };\n }\n\n /**\n * Saves the run configuration the scenario gives agents created in the administration through the\n * mock's own endpoints, as an administrator would: the run settings, then each skill and trigger,\n * put live when the scenario says so, and then the consultations defined as data of every agent. A\n * part the mock refuses fails the scenario at once.\n */\n private presetRunConfigurations(agents: readonly NhAssistantMockAdminAgent[]): void {\n const query = new URLSearchParams();\n for (const agent of agents) {\n const preset = agent.runConfiguration;\n if (!preset) {\n continue;\n }\n if (agent.source !== 'admin') {\n throw new Error(`Mock agent '${agent.id}' runs as its code says; only an agent created in the administration has a run configuration as data.`);\n }\n\n presetStep(agent.id, 'run settings', this.runConfiguration.handle('PUT', agent.id, ['run-settings'], preset.runSettings, query));\n for (const { skillId, shadow, ...skill } of preset.skills ?? []) {\n presetStep(agent.id, `skill '${skillId}'`, this.runConfiguration.handle('PUT', agent.id, ['skills', skillId], skill, query));\n if (shadow === false) {\n presetStep(agent.id, `live skill '${skillId}'`, this.agents.skillShadowEndpoint('POST', agent.id, skillId, { mode: 'live' }));\n }\n }\n for (const { triggerId, shadow, ...trigger } of preset.triggers ?? []) {\n presetStep(agent.id, `trigger '${triggerId}'`, this.runConfiguration.handle('PUT', agent.id, ['triggers', triggerId], trigger, query));\n if (shadow === false) {\n presetStep(agent.id, `live trigger '${triggerId}'`, this.runConfiguration.handle('POST', agent.id, ['triggers', triggerId, 'shadow'], { mode: 'live' }, query));\n }\n }\n }\n for (const agent of agents) {\n for (const { subjectType, ...consultation } of agent.dataConsultations ?? []) {\n presetStep(agent.id, `consultation about '${subjectType}'`, this.runConfiguration.handle('PUT', agent.id, ['consultations', subjectType], consultation, query));\n }\n }\n }\n\n /**\n * The scenario's tools, with the object type they name as the server reports it, the generated tools\n * of the consultations defined as data in effect, read live as the server reads its catalogs, and\n * the enabled MCP tools.\n */\n private toolCatalog(): ToolCatalogEntry[] {\n return [\n ...(this.scenario.admin?.tools ?? []).map(tool => ({ ...tool, subjectType: tool.subjectType ?? null })),\n ...this.runConfiguration.consultationTools(),\n ...this.mcp.catalogEntries()\n ];\n }\n}\n\n/** Fails the scenario when the mock refused a part of a preset run configuration, with the mock's answer. */\nfunction presetStep(agentId: string, part: string, result: NhAssistantMockResult | null): void {\n if (!result || result.status >= 300) {\n throw new Error(`The mock refused the ${part} of agent '${agentId}' in the scenario's run configuration: ${JSON.stringify(result?.body ?? null)}.`);\n }\n}\n\nfunction toContext(version: ApplicationContextVersion & { text: string }): ApplicationContext {\n return { text: version.text, version: version.version, hash: version.hash, updatedAt: version.updatedAt, updatedBy: version.updatedBy };\n}\n","import {\n AdminAgent,\n AdminAgentInput,\n AgentHandOffs,\n AgentMetadata,\n AgentPackage,\n AgentPackageExportOptions,\n AgentPackageImportOptions,\n AgentPackageLink,\n AgentPackagePart,\n AgentPackagePartKind,\n AgentPackagePartOutcome,\n AgentPackageWarning,\n AgentRunConfiguration,\n NH_ASSISTANT_AGENT_PACKAGE_FORMAT,\n NH_ASSISTANT_AGENT_PACKAGE_FORMAT_VERSION,\n NH_ASSISTANT_AGENT_PACKAGE_MAX_AGENTS,\n NH_ASSISTANT_AGENT_PACKAGE_MAX_BYTES,\n NH_ASSISTANT_PACKAGE_LOCK_ALL,\n NH_ASSISTANT_PACKAGE_LOCK_FIELDS,\n PackageAgent,\n PackagePartLink\n} from '@newheap/platform-ai-chat';\nimport { NhAssistantMockAgentPackage } from './nh-assistant-mock.models';\nimport { NhAssistantMockResult, mockDashCase, mockFailure as failure, mockMaxStateReason as maxReason, mockSnapshot } from './nh-assistant-mock-admin-shared';\n\n/** What the agent packages read and change of the rest of the mock. */\nexport interface NhAssistantMockPackageContext {\n /**\n * Answers an administration request (`admin/...`) as its endpoint does, without the package locks:\n * the import's own path through the save validators.\n */\n call(method: string, path: string, body?: unknown): NhAssistantMockResult;\n /** The definition in code of an agent in code, for its overlay; `null` for an agent created here. */\n codeDefinition(agentId: string): AdminAgentInput | null;\n /** A copy of every store of the administration; the returned function puts it back. */\n snapshot(): () => void;\n now(): string;\n}\n\n/** The link of one part of an agent to the package it was imported from. */\ninterface PartLink {\n lockedFields: string[];\n /** The SHA-256 of the part's canonical JSON once the package's version is in effect. */\n hash: string;\n /** The fields of the package's version, which a locked field keeps. */\n view: Record<string, unknown> | null;\n packageVersion: number;\n linkedAt: string;\n linkedBy: string;\n}\n\n/** An agent's link to its package: the linked parts, and those an administrator unlinked (`*` for all). */\ninterface AgentLink {\n packageId: string;\n packageVersion: number;\n parts: Map<string, PartLink>;\n local: Set<string>;\n}\n\n/** A package the host imported. */\ninterface InstalledPackage {\n version: number;\n agents: string[];\n}\n\n/** What the mock reads of one agent on the host. */\ninterface HostRead {\n agent: AdminAgent;\n configuration: AgentRunConfiguration | null;\n handOffs: AgentHandOffs | null;\n metadata: AgentMetadata[];\n}\n\n/** The outcome of one part during an import, with what it needs for the link afterwards. */\ninterface PlannedPart extends AgentPackagePart {\n /** The hash of the host's part once the package's version is in effect. */\n hashAfter: string | null;\n /** The fields of the host's part once the package's version is in effect. */\n viewAfter: Record<string, unknown> | null;\n}\n\n/** The longest package id. */\nconst maxPackageId = 128;\n/** The longest package description. */\nconst maxPackageDescription = 500;\n/** The header of the export that lists the references to agents outside the selection. */\nconst warningsHeader = 'X-NewHeap-Package-Warnings';\n\n/** The order in which an import writes the parts of its agents. */\nconst phaseOrder: readonly AgentPackagePartKind[] = ['agent', 'runSettings', 'skill', 'trigger', 'consultation', 'handOff', 'metadata'];\n\n/** The properties of the package format each lockable field stands for. */\nconst lockProperties: Readonly<Record<AgentPackagePartKind, Readonly<Record<string, readonly string[]>>>> = {\n agent: {\n instructions: ['instructions', 'instructionsAsset'],\n worksOn: ['worksOnSubjectTypes', 'worksOnAllSubjects', 'worksOnApplication', 'perDivision', 'runPolicy', 'viewPolicy']\n },\n runSettings: {\n dailyBudget: ['dailyToolCalls', 'dailyTokens'],\n files: ['acceptsFiles', 'maxFileBytes', 'maxFilePages', 'maxFilesPerTurn', 'maxFileTokensPerTurn']\n },\n skill: {\n instructions: ['instructions', 'instructionsAsset'],\n dailyBudget: ['dailyToolCalls', 'dailyTokens'],\n files: ['acceptsFiles', 'maxFileBytes', 'maxFilePages', 'maxFilesPerTurn', 'maxFileTokensPerTurn']\n },\n trigger: {},\n consultation: {\n limits: ['maxToolCalls', 'timeoutSeconds', 'maxAnswerChars', 'maxHistoryMessages']\n },\n handOff: {},\n metadata: {}\n};\n\n/** The fields of the definition an administrator overrides on an agent in code, and its overlay carries. */\nconst codeAgentFields = ['displayName', 'description', 'instructions', 'toolSelectors', 'requiredPolicy', 'autonomy'] as const;\n\n/** The properties the strict format reads per object, required ones first. */\nconst formatShapes: Readonly<Record<string, { required: readonly string[]; optional: readonly string[] }>> = {\n root: { required: ['format', 'formatVersion', 'package', 'agents'], optional: [] },\n package: { required: ['id', 'version'], optional: ['description'] },\n agent: {\n required: ['id', 'source'],\n optional: ['definition', 'runSettings', 'skills', 'triggers', 'consultations', 'handOffs', 'metadata', 'groups', 'locks', 'hashes']\n },\n definition: {\n required: [],\n optional: [\n 'displayName', 'description', 'instructions', 'instructionsAsset', 'toolSelectors', 'requiredPolicy', 'autonomy', 'offeredInChat',\n 'worksOnSubjectTypes', 'worksOnAllSubjects', 'worksOnApplication', 'perDivision', 'runPolicy', 'viewPolicy', 'profile',\n 'dataClassification', 'startsOff', 'startsInShadow', 'shadowOf'\n ]\n },\n runSettings: {\n required: ['accountability'],\n optional: [\n 'delegateFromInitiator', 'allowGatewayReads', 'elevatedReads', 'approvalPolicy', 'retryCount', 'dailyToolCalls', 'dailyTokens',\n 'maxConcurrentRuns', 'maxRunsPerSubjectPerDay', 'maxTokensPerRun', 'triageProfile', 'ruleHandler', 'acceptsFiles', 'maxFileBytes',\n 'maxFilePages', 'maxFilesPerTurn', 'maxFileTokensPerTurn'\n ]\n },\n skill: {\n required: ['id', 'description'],\n optional: [\n 'instructions', 'instructionsAsset', 'tools', 'profile', 'ruleHandler', 'maxTokensPerRun', 'dailyToolCalls', 'dailyTokens',\n 'approvalPolicy', 'dataClassification', 'acceptsFiles', 'maxFileBytes', 'maxFilePages', 'maxFilesPerTurn', 'maxFileTokensPerTurn',\n 'startsOff'\n ]\n },\n trigger: {\n required: ['id', 'source'],\n optional: ['skill', 'event', 'filters', 'cron', 'timeZone', 'subjectSet', 'message', 'conflict', 'debounceSeconds']\n },\n consultation: {\n required: ['subjectType', 'description'],\n optional: [\n 'instructions', 'minimumRole', 'askerPolicy', 'routes', 'proposalRole', 'proposalPolicy', 'toolSelectors', 'maxToolCalls',\n 'timeoutSeconds', 'maxAnswerChars', 'maxHistoryMessages', 'allowRequests', 'exposeToMcp', 'dataClassification', 'startsOff'\n ]\n },\n handOff: { required: ['subjectType', 'sources'], optional: ['description', 'notifySource', 'maxPerSubjectPerDay'] },\n instructionsAsset: { required: ['assetId', 'version', 'hash'], optional: [] }\n};\n\n/**\n * Agent packages of the mock API (S7-2), with the rules of the server: an export of exactly the chosen\n * agents with the references to agents outside them, a preview per part (`created`, `changed`,\n * `unchanged`, `kept-local`, `left-behind`, `refused`) after one check of the whole package against\n * the host as it would be after the import, and an import that applies every part through the mock's\n * own endpoints in dependency order, or nothing: a refused part answers `409 assistant-package-refused`\n * with the plain field error `parts: invalid`, and the preview says why. Linked parts carry their link\n * in every read; every save path refuses a change of a locked field with `{field}: locked`, and removing\n * a locked part or deleting or resetting a linked agent answers `409 assistant-package-locked`.\n * Unlinking makes a part local: the next upgrade keeps it as `kept-local` unless the import relinks it.\n * An import takes over an agent the host has with a package agent's id and no package of its own when\n * `relink` names that whole agent; otherwise the agent refuses the package (`assistant-agent-exists`).\n * Hashes are the SHA-256 of each part's canonical JSON; a hash a package gives is not checked.\n */\nexport class NhAssistantMockAgentPackages {\n private readonly links = new Map<string, AgentLink>();\n private readonly installed = new Map<string, InstalledPackage>();\n\n constructor(private readonly context: NhAssistantMockPackageContext) {\n }\n\n /**\n * Imports the scenario's packages in order, as an administrator would; a package the import refuses\n * fails the scenario at once.\n */\n importPresets(presets: readonly NhAssistantMockAgentPackage[]): void {\n for (const preset of presets) {\n const result = this.importPackage({ package: preset.package, options: { serviceAccounts: preset.serviceAccounts ?? null } }, true);\n if (result.status !== 200) {\n throw new Error(`The mock refused the scenario's agent package '${preset.package?.package?.id}': ${JSON.stringify(result.body ?? null)}.`);\n }\n }\n }\n\n /**\n * `POST admin/agent-packages/export`, `.../preview` and `.../import`, and `POST\n * admin/agents/{id}/package/unlink`; `null` for another route.\n */\n handle(method: string, segments: readonly string[], body: unknown): NhAssistantMockResult | null {\n if (segments[0] !== 'admin') {\n return null;\n }\n if (segments[1] === 'agent-packages' && segments.length === 3) {\n if (method !== 'POST') {\n return { status: 405 };\n }\n switch (segments[2]) {\n case 'export':\n return this.exportPackage(body);\n case 'preview':\n return this.importPackage(body, false);\n case 'import':\n return this.importPackage(body, true);\n default:\n return failure('assistant-not-found');\n }\n }\n if (segments[1] === 'agents' && segments[3] === 'package' && segments[4] === 'unlink' && segments.length === 5) {\n return method === 'POST' ? this.unlink(segments[2], body) : { status: 405 };\n }\n return null;\n }\n\n /**\n * Runs a save of the administration under the package locks: a save may keep a locked field's value\n * or take the package's, never another; such a change is undone and refused with `{field}: locked`.\n * Removing a part with locks and deleting a linked agent answer `409 assistant-package-locked`, as\n * does a reset that would give a locked field of the definition another value; removing a linked\n * part without locks drops its link. Other requests run as they are.\n */\n guard(method: string, segments: readonly string[], run: () => NhAssistantMockResult): NhAssistantMockResult {\n const target = guardedPart(method, segments);\n if (!target) {\n return run();\n }\n if (target.part === null) {\n return this.isLinked(target.agentId) ? failure('assistant-package-locked') : run();\n }\n const reset = target.reset === true;\n\n const link = this.links.get(target.agentId)?.parts.get(target.part);\n if (!link) {\n return run();\n }\n if (target.removal) {\n if (link.lockedFields.length > 0) {\n return failure('assistant-package-locked');\n }\n const removed = run();\n if (removed.status < 300) {\n this.links.get(target.agentId)?.parts.delete(target.part);\n }\n return removed;\n }\n if (link.lockedFields.length === 0) {\n return run();\n }\n\n const kind = kindOf(target.part);\n const before = this.lockView(target.agentId, target.part);\n const restore = this.context.snapshot();\n const result = run();\n if (result.status >= 300) {\n return result;\n }\n\n const changed = lockedChanges(kind, link.lockedFields, before, this.lockView(target.agentId, target.part), link.view);\n if (changed.length > 0) {\n restore();\n return reset ? failure('assistant-package-locked') : failure('assistant-validation', Object.fromEntries(changed.map(field => [field, ['locked']])));\n }\n return result;\n }\n\n /**\n * Adds the package links to an administration answer: the agent's package on agents, the part's link\n * on run settings, skills, triggers, consultations, hand-offs and metadata entries.\n */\n decorate(method: string, segments: readonly string[], result: NhAssistantMockResult): NhAssistantMockResult {\n if (segments[0] !== 'admin' || segments[1] !== 'agents' || result.status >= 300 || result.body === undefined || this.links.size === 0) {\n return result;\n }\n\n const [, , agentId, area, id, action] = segments;\n const body = result.body;\n if (agentId === undefined) {\n if (Array.isArray(body)) {\n return { ...result, body: body.map(agent => this.withAgentPackage(agent as AdminAgent)) };\n }\n return { ...result, body: this.withAgentPackage(body as AdminAgent) };\n }\n if (area === undefined || (area === 'reset' && segments.length === 4)) {\n return { ...result, body: this.withAgentPackage(body as AdminAgent) };\n }\n if (method === 'DELETE' && area !== 'metadata') {\n return result;\n }\n\n switch (area) {\n case 'configuration': {\n const configuration = body as AgentRunConfiguration;\n return {\n ...result,\n body: {\n ...configuration,\n runSettings: configuration.runSettings ? this.withLink(agentId, 'runSettings', configuration.runSettings) : configuration.runSettings,\n dataSkills: configuration.dataSkills.map(skill => this.withLink(agentId, `skill:${skill.skillId}`, skill)),\n dataTriggers: configuration.dataTriggers.map(trigger => this.withLink(agentId, `trigger:${trigger.triggerId}`, trigger)),\n dataConsultations: configuration.dataConsultations?.map(item => this.withLink(agentId, `consultation:${item.subjectType}`, item))\n }\n };\n }\n case 'run-settings':\n return { ...result, body: this.withLink(agentId, 'runSettings', body as object) };\n case 'skills':\n return id !== undefined && (segments.length === 5 || (action === 'candidate' && segments[6] === 'promote'))\n ? { ...result, body: this.withLink(agentId, `skill:${id}`, body as object) }\n : result;\n case 'triggers':\n return id !== undefined && (segments.length === 5 || (action === 'candidate' && segments[6] === 'promote') || action === 'shadow')\n ? { ...result, body: this.withLink(agentId, `trigger:${id}`, body as object) }\n : result;\n case 'consultations':\n return id !== undefined ? { ...result, body: this.withLink(agentId, `consultation:${id}`, body as object) } : result;\n case 'hand-offs': {\n if (id !== undefined) {\n return { ...result, body: this.withLink(agentId, `handOff:${id}`, body as object) };\n }\n const handOffs = body as AgentHandOffs;\n return { ...result, body: { ...handOffs, dataHandOffs: handOffs.dataHandOffs.map(item => this.withLink(agentId, `handOff:${item.subjectType}`, item)) } };\n }\n case 'metadata':\n if (id !== undefined) {\n return { ...result, body: this.withLink(agentId, `metadata:${id}`, body as object) };\n }\n return { ...result, body: (body as AgentMetadata[]).map(entry => this.withLink(agentId, `metadata:${entry.name}`, entry)) };\n default:\n return result;\n }\n }\n\n /** A copy of the links and the imported packages; the returned function puts them back. */\n snapshot(): () => void {\n return mockSnapshot(this.links, this.installed);\n }\n\n /** Forgets the links of an agent that was deleted, as the server removes them with it. */\n forget(agentId: string): void {\n this.links.delete(agentId);\n }\n\n private exportPackage(body: unknown): NhAssistantMockResult {\n const request = (body ?? {}) as { agentIds?: unknown; options?: AgentPackageExportOptions | null };\n const agentIds = request.agentIds;\n if (!Array.isArray(agentIds) || agentIds.length === 0 || !agentIds.every(id => typeof id === 'string')) {\n return failure('assistant-validation', { agentIds: ['required'] });\n }\n if (agentIds.length > NH_ASSISTANT_AGENT_PACKAGE_MAX_AGENTS) {\n return failure('assistant-validation', { agentIds: ['too-long'] });\n }\n if (new Set(agentIds).size !== agentIds.length) {\n return failure('assistant-validation', { agentIds: ['invalid'] });\n }\n\n const reads: HostRead[] = [];\n for (const agentId of agentIds as string[]) {\n const read = this.read(agentId);\n if (!read) {\n return failure('assistant-agent-not-found');\n }\n reads.push(read);\n }\n\n const options = request.options ?? {};\n const errors: Record<string, string[]> = {};\n const linked = this.links.get(reads[0].agent.id);\n const packageId = text(options.packageId) ?? linked?.packageId ?? reads[0].agent.id;\n if (!mockDashCase.test(packageId) || packageId.length > maxPackageId) {\n errors['packageId'] = ['invalid'];\n }\n const installed = this.installed.get(packageId);\n const version = options.version ?? (installed ? installed.version + 1 : 1);\n if (!Number.isInteger(version) || version < 1) {\n errors['version'] = ['invalid'];\n }\n const description = text(options.description);\n if (description !== null && description.length > maxPackageDescription) {\n errors['description'] = ['too-long'];\n }\n\n const agents = reads.map(read => this.packageAgentOf(read));\n for (const [agentId, locks] of Object.entries(options.locks ?? {})) {\n const agent = agents.find(item => item.id === agentId);\n for (const [part, fields] of Object.entries(locks ?? {})) {\n // A lock of an agent or part the export does not hold, or of a field its kind does not lock.\n const problem = agent ? lockProblem(agent, part, fields) : 'not-found';\n if (problem) {\n errors['locks'] = ['invalid'];\n } else if (agent && fields.length > 0) {\n agent.locks = { ...(agent.locks ?? {}), [part]: [...fields] };\n }\n }\n }\n if (Object.keys(errors).length > 0) {\n return failure('assistant-validation', errors);\n }\n\n for (const agent of agents) {\n agent.hashes = Object.fromEntries([...partsOf(agent)].map(([part, value]) => [part, mockSha256(canonicalJson(value))]));\n }\n const agentPackage: AgentPackage = {\n format: NH_ASSISTANT_AGENT_PACKAGE_FORMAT,\n formatVersion: NH_ASSISTANT_AGENT_PACKAGE_FORMAT_VERSION,\n package: { id: packageId, version, ...(description !== null ? { description } : {}) },\n agents\n };\n return {\n status: 200,\n text: JSON.stringify(withoutNulls(agentPackage), null, 2),\n headers: {\n 'content-type': 'application/json',\n 'content-disposition': `attachment; filename=\"agent-package-${packageId}.json\"`,\n [warningsHeader]: JSON.stringify(this.warningsOf(reads))\n }\n };\n }\n\n /** Every reference of the exported agents to agents outside the selection. */\n private warningsOf(reads: readonly HostRead[]): AgentPackageWarning[] {\n const selected = new Set(reads.map(read => read.agent.id));\n const everyone = this.agents();\n const warnings: AgentPackageWarning[] = [];\n const outside = (agentId: string, part: string, code: string, referencedAgentId: string): void => {\n if (!selected.has(referencedAgentId)) {\n warnings.push({ agentId, part, code, referencedAgentId });\n }\n };\n\n for (const { agent, configuration, handOffs } of reads) {\n if (agent.shadowOf) {\n outside(agent.id, 'agent', 'shadow-of', agent.shadowOf);\n }\n for (const variant of everyone.filter(item => item.shadowOf === agent.id)) {\n outside(agent.id, 'agent', 'shadow-variant', variant.id);\n }\n for (const handOff of handOffs?.dataHandOffs ?? []) {\n for (const source of handOff.sources) {\n outside(agent.id, `handOff:${handOff.subjectType}`, 'hand-off-source', source);\n }\n }\n for (const consultation of configuration?.dataConsultations ?? []) {\n for (const asker of consultation.askingAgents) {\n outside(agent.id, `consultation:${consultation.subjectType}`, 'consultation-asker', asker);\n }\n }\n }\n return warnings;\n }\n\n /**\n * `POST admin/agent-packages/preview` (`keep` false) and `.../import`: the package read strictly, its\n * parts applied in dependency order on a copy of the host, and, for an import without a refused part,\n * applied for real with the links of its parts. An import with a refused part answers\n * `assistant-package-refused` with `parts: invalid`, as the server does; the preview names each reason.\n */\n private importPackage(body: unknown, keep: boolean): NhAssistantMockResult {\n const request = (body ?? {}) as { package?: unknown; options?: AgentPackageImportOptions | null };\n const read = readPackage(request.package);\n if ('status' in read) {\n return read;\n }\n\n const agentPackage = read.package;\n const options = request.options ?? {};\n const apply = options.apply ?? 'live';\n if (apply !== 'live' && apply !== 'shadow') {\n return failure('assistant-validation', { apply: ['invalid'] });\n }\n // The accounts and the parts to relink name agents of the package, as the server checks them.\n const ids = new Set(agentPackage.agents.map(agent => agent.id));\n const optionErrors: Record<string, string[]> = {};\n if (Object.entries(options.serviceAccounts ?? {}).some(([agentId, actorId]) =>\n !ids.has(agentId) || typeof actorId !== 'string' || actorId.trim().length === 0 || actorId.trim().length > 256)) {\n optionErrors['serviceAccounts'] = ['invalid'];\n }\n if ((options.relink ?? []).some(item => !item || !ids.has(item.agentId)\n || (item.part !== null && item.part !== undefined && (typeof item.part !== 'string' || !validPartKey(item.part))))) {\n optionErrors['relink'] = ['invalid'];\n }\n if (Object.keys(optionErrors).length > 0) {\n return failure('assistant-validation', optionErrors);\n }\n\n // The check tries every part on a copy of the host, in live mode, and puts the host back.\n const restoreHost = this.context.snapshot();\n const restoreOwn = this.snapshot();\n const planned = this.apply(agentPackage, options, 'live', null);\n restoreHost();\n restoreOwn();\n\n const preview = {\n packageId: agentPackage.package.id,\n packageVersion: agentPackage.package.version,\n installedVersion: this.installed.get(agentPackage.package.id)?.version ?? null,\n importable: planned.every(part => part.outcome !== 'refused'),\n parts: planned.map(publicPart)\n };\n if (!keep) {\n return { status: 200, body: preview };\n }\n if (!preview.importable) {\n return failure('assistant-package-refused', refusedErrors);\n }\n\n // The import applies the package for real, with the chosen mode, and links its parts.\n const restoreAll = [this.context.snapshot(), this.snapshot()];\n const applied = this.apply(agentPackage, options, apply, planned);\n if (applied.some(part => part.outcome === 'refused')) {\n for (const restore of restoreAll) {\n restore();\n }\n return failure('assistant-package-refused', refusedErrors);\n }\n this.link(agentPackage, options, planned);\n return {\n status: 200,\n body: {\n packageId: agentPackage.package.id,\n packageVersion: agentPackage.package.version,\n hash: mockSha256(canonicalJson(agentPackage)),\n parts: applied.map(publicPart)\n }\n };\n }\n\n /**\n * Applies every agent and part of the package to the host in dependency order: agents that are no\n * shadow variant of another agent of the package first, each phase for all of them, then the\n * variants; reports per part what happened, `refused` with the endpoint's code or field errors.\n * Parts an administrator unlinked stay as they are (`kept-local`) unless `relink` names them; agents\n * and parts an earlier version of the package linked that it no longer holds are `left-behind`.\n */\n private apply(\n agentPackage: AgentPackage,\n options: AgentPackageImportOptions,\n mode: 'live' | 'shadow',\n plan: readonly PlannedPart[] | null\n ): PlannedPart[] {\n const packageId = agentPackage.package.id;\n const ids = new Set(agentPackage.agents.map(agent => agent.id));\n const live = agentPackage.agents.filter(agent => !agent.definition?.shadowOf || !ids.has(agent.definition.shadowOf));\n const variants = agentPackage.agents.filter(agent => !live.includes(agent));\n const results = new Map<string, PlannedPart[]>();\n const refusedAgents = new Set<string>();\n\n for (const group of [live, variants]) {\n for (const kind of phaseOrder) {\n for (const agent of group) {\n if (refusedAgents.has(agent.id)) {\n continue;\n }\n for (const [part, value] of partsOf(agent)) {\n if (kindOf(part) !== kind) {\n continue;\n }\n const planned = plan?.find(item => item.agentId === agent.id && item.part === part);\n // The import writes only what the check found new or changed.\n const outcome = planned && planned.outcome !== 'created' && planned.outcome !== 'changed'\n ? planned\n : this.applyPart(agentPackage, agent, part, value, options, mode);\n results.set(agent.id, [...(results.get(agent.id) ?? []), outcome]);\n if (kind === 'agent' && outcome.outcome === 'refused') {\n refusedAgents.add(agent.id);\n }\n }\n // Groups go with the agent: they are no part, and stay free once imported.\n if (kind === 'agent' && !refusedAgents.has(agent.id) && agent.groups && !agent.definition?.shadowOf) {\n const groups = this.context.call('PUT', `admin/agents/${encodeURIComponent(agent.id)}/groups`, { groups: agent.groups });\n if (groups.status >= 300) {\n const refusal = refusalOf(agent.id, 'agent', groups, agent.locks?.['agent'] ?? []);\n results.set(agent.id, [refusal, ...(results.get(agent.id) ?? []).filter(item => item.part !== 'agent')]);\n refusedAgents.add(agent.id);\n }\n }\n }\n }\n }\n\n // What an earlier version of the package linked and this one no longer holds stays, unlinked.\n const ordered = agentPackage.agents.flatMap(agent => results.get(agent.id) ?? []);\n for (const [agentId, link] of this.links) {\n if (link.packageId !== packageId) {\n continue;\n }\n if (!ids.has(agentId)) {\n ordered.push(leftBehind(agentId, 'agent'));\n continue;\n }\n const held = new Set(partsOf(agentPackage.agents.find(agent => agent.id === agentId)!).keys());\n for (const part of link.parts.keys()) {\n if (!held.has(part)) {\n ordered.push(leftBehind(agentId, part));\n }\n }\n }\n return ordered;\n }\n\n /** Applies one part through its endpoint and reports what happened to it. */\n private applyPart(\n agentPackage: AgentPackage,\n agent: PackageAgent,\n part: string,\n value: unknown,\n options: AgentPackageImportOptions,\n mode: 'live' | 'shadow'\n ): PlannedPart {\n const lockedFields = agent.locks?.[part] ?? [];\n const link = this.links.get(agent.id);\n const linkedHere = link?.packageId === agentPackage.package.id;\n const relinked = (options.relink ?? []).some(item => item.agentId === agent.id && (item.part === null || item.part === undefined || item.part === part));\n const lockProblemCode = lockProblem(agent, part, lockedFields);\n if (lockProblemCode) {\n return { ...base(agent.id, part, lockedFields), outcome: 'refused', errors: { locks: [lockProblemCode] } };\n }\n\n const host = this.read(agent.id);\n if (part === 'agent') {\n // A relink of the whole agent lets the import take over an agent the host has with its id.\n const takenOver = (options.relink ?? []).some(item => item.agentId === agent.id && (item.part === null || item.part === undefined));\n const otherPackage = !!link && !linkedHere && link.parts.size > 0;\n const refusal = agentRefusal(agent, host?.agent ?? null, linkedHere || takenOver, otherPackage);\n if (refusal) {\n return { ...base(agent.id, part, lockedFields), outcome: 'refused', code: refusal };\n }\n }\n if (linkedHere && !relinked && (link!.local.has(part) || link!.local.has(NH_ASSISTANT_PACKAGE_LOCK_ALL))) {\n return { ...base(agent.id, part, lockedFields), outcome: 'kept-local' };\n }\n\n const before = host ? this.hostHash(host, part) : null;\n const partLink = linkedHere ? link!.parts.get(part) : undefined;\n const result = this.write(agent, part, value, host, options, mode);\n if (result.status >= 300) {\n return refusalOf(agent.id, part, result, lockedFields);\n }\n\n const after = this.read(agent.id);\n const hashAfter = after ? this.hostHash(after, part) : null;\n // In shadow a changed skill or trigger is saved as the candidate next to its live version.\n const kind = kindOf(part);\n const candidateVersion = mode === 'shadow' && before !== null && (kind === 'skill' || kind === 'trigger')\n ? (result.body as { version?: number } | undefined)?.version ?? null\n : null;\n let outcome: AgentPackagePartOutcome = 'changed';\n if (before === null) {\n outcome = 'created';\n } else if (candidateVersion === null && before === hashAfter) {\n outcome = 'unchanged';\n }\n return {\n ...base(agent.id, part, lockedFields),\n outcome,\n changedLocally: !!partLink && before !== partLink.hash,\n candidateVersion,\n hashAfter,\n viewAfter: this.lockView(agent.id, part)\n };\n }\n\n /** Writes one part through the endpoint a save of it uses. */\n private write(\n agent: PackageAgent,\n part: string,\n value: unknown,\n host: HostRead | null,\n options: AgentPackageImportOptions,\n mode: 'live' | 'shadow'\n ): NhAssistantMockResult {\n const kind = kindOf(part);\n const key = keyOf(part);\n const agentPath = `admin/agents/${encodeURIComponent(agent.id)}`;\n const item = value as Record<string, unknown>;\n switch (kind) {\n case 'agent':\n return this.writeDefinition(agent, host);\n case 'runSettings': {\n const settings = item as Record<string, unknown> & { accountability?: string };\n const account = settings.accountability === 'service-account' ? options.serviceAccounts?.[agent.id] ?? null : null;\n return this.context.call('PUT', `${agentPath}/run-settings`, {\n ...settings,\n serviceAccountActorId: account,\n expectedVersion: host?.configuration?.runSettings?.version ?? null\n });\n }\n case 'skill': {\n const { id: _, startsOff, ...skill } = item;\n const current = host?.configuration?.dataSkills.find(existing => existing.skillId === key);\n return this.context.call('PUT', `${agentPath}/skills/${encodeURIComponent(key)}`, {\n ...skill,\n tools: skill['tools'] ?? [],\n expectedVersion: current?.version ?? null,\n ...(current ? { apply: mode } : startsOff === true ? { startsOff: true } : {})\n });\n }\n case 'trigger': {\n const { id: _, ...trigger } = item;\n const current = host?.configuration?.dataTriggers.find(existing => existing.triggerId === key);\n return this.context.call('PUT', `${agentPath}/triggers/${encodeURIComponent(key)}`, {\n ...trigger,\n expectedVersion: current?.version ?? null,\n ...(current ? { apply: mode } : {})\n });\n }\n case 'consultation': {\n const { subjectType: _, startsOff, ...consultation } = item;\n const current = host?.configuration?.dataConsultations?.find(existing => existing.subjectType === key);\n return this.context.call('PUT', `${agentPath}/consultations/${encodeURIComponent(key)}`, {\n ...consultation,\n routes: consultation['routes'] ?? [],\n expectedVersion: current?.version ?? null,\n ...(!current && startsOff === true ? { startsOff: true } : {})\n });\n }\n case 'handOff': {\n const { subjectType: _, ...handOff } = item;\n const current = host?.handOffs?.dataHandOffs.find(existing => existing.subjectType === key);\n return this.context.call('PUT', `${agentPath}/hand-offs/${encodeURIComponent(key)}`, {\n ...handOff,\n expectedVersion: current?.version ?? null\n });\n }\n case 'metadata': {\n const entry = this.read(agent.id)?.metadata.find(existing => existing.name === key);\n return entry\n ? this.context.call('PUT', `${agentPath}/metadata/${encodeURIComponent(key)}`, { value, expectedVersion: entry.version })\n : failure('assistant-metadata-entry-not-found');\n }\n }\n }\n\n /**\n * Writes the definition: creates an agent created here when its id is free, or makes its next\n * version; overrides an agent in code with the overlay, or restores its code without one.\n */\n private writeDefinition(agent: PackageAgent, host: HostRead | null): NhAssistantMockResult {\n const definition = agent.definition ?? {};\n if (agent.source === 'code') {\n const code = this.context.codeDefinition(agent.id)!;\n const overlay = codeAgentFields.filter(field => definition[field] !== undefined && definition[field] !== null);\n if (overlay.length === 0) {\n return host?.agent.isOverridden\n ? this.context.call('POST', `admin/agents/${encodeURIComponent(agent.id)}/reset`)\n : { status: 200, body: host?.agent };\n }\n return this.context.call('PUT', `admin/agents/${encodeURIComponent(agent.id)}`, {\n ...code,\n ...Object.fromEntries(overlay.map(field => [field, definition[field]])),\n id: agent.id,\n mcpServerIds: host?.agent.mcpServerIds ?? [],\n expectedVersion: host?.agent.version ?? 1\n });\n }\n\n const worksOn = ['worksOnSubjectTypes', 'worksOnAllSubjects', 'worksOnApplication', 'perDivision', 'runPolicy', 'viewPolicy'] as const;\n const input: Record<string, unknown> = {\n id: agent.id,\n displayName: definition.displayName ?? '',\n description: definition.description ?? '',\n instructions: definition.instructions ?? '',\n ...(definition.instructionsAsset ? { instructionsAsset: definition.instructionsAsset } : {}),\n toolSelectors: definition.toolSelectors ?? [],\n mcpServerIds: host?.agent.mcpServerIds ?? [],\n requiredPolicy: definition.requiredPolicy ?? null,\n autonomy: definition.autonomy ?? 'explain',\n ...(definition.offeredInChat !== undefined && definition.offeredInChat !== null ? { offeredInChat: definition.offeredInChat } : {}),\n ...(worksOn.some(field => definition[field] !== undefined && definition[field] !== null)\n ? Object.fromEntries(worksOn.map(field => [field, definition[field] ?? null]))\n : {}),\n ...(definition.profile ? { profile: definition.profile } : {}),\n ...(definition.dataClassification ? { dataClassification: definition.dataClassification } : {})\n };\n if (!host) {\n return this.context.call('POST', 'admin/agents', {\n ...input,\n ...(definition.startsOff ? { startsOff: true } : {}),\n ...(definition.startsInShadow ? { startsInShadow: true } : {}),\n ...(definition.shadowOf ? { shadowOf: definition.shadowOf } : {})\n });\n }\n return this.context.call('PUT', `admin/agents/${encodeURIComponent(agent.id)}`, { ...input, expectedVersion: host.agent.version });\n }\n\n /**\n * Links the parts of an import: each part the import applied or found unchanged, with its locks and\n * the hash of the host's part once the package's version is in effect; parts that stayed local stay\n * so, relinked ones are linked again, and what the package left behind is unlinked.\n */\n private link(agentPackage: AgentPackage, options: AgentPackageImportOptions, planned: readonly PlannedPart[]): void {\n const packageId = agentPackage.package.id;\n const version = agentPackage.package.version;\n const now = this.context.now();\n for (const agent of agentPackage.agents) {\n const previous = this.links.get(agent.id);\n const kept = previous?.packageId === packageId ? previous : undefined;\n const relinked = (options.relink ?? []).filter(item => item.agentId === agent.id);\n const local = new Set([...(kept?.local ?? [])].filter(part =>\n !relinked.some(item => item.part === null || item.part === undefined || item.part === part)));\n if (relinked.some(item => item.part === null || item.part === undefined)) {\n local.clear();\n }\n\n const parts = new Map<string, PartLink>();\n for (const item of planned.filter(entry => entry.agentId === agent.id)) {\n if (item.outcome === 'kept-local' || item.outcome === 'left-behind' || item.outcome === 'refused') {\n continue;\n }\n const previousLink = kept?.parts.get(item.part);\n parts.set(item.part, {\n lockedFields: [...item.lockedFields],\n hash: item.hashAfter ?? previousLink?.hash ?? '',\n view: item.viewAfter ?? previousLink?.view ?? null,\n packageVersion: version,\n linkedAt: item.outcome === 'unchanged' && previousLink ? previousLink.linkedAt : now,\n linkedBy: item.outcome === 'unchanged' && previousLink ? previousLink.linkedBy : 'current-user'\n });\n }\n this.links.set(agent.id, { packageId, packageVersion: version, parts, local });\n }\n for (const item of planned.filter(entry => entry.outcome === 'left-behind' && entry.part === 'agent')) {\n this.links.delete(item.agentId);\n }\n this.installed.set(packageId, { version, agents: agentPackage.agents.map(agent => agent.id) });\n }\n\n /** `POST admin/agents/{id}/package/unlink`: one part, or without one the whole agent, becomes local. */\n private unlink(agentId: string, body: unknown): NhAssistantMockResult {\n if (!this.read(agentId)) {\n return failure('assistant-agent-not-found');\n }\n const request = (body ?? {}) as { part?: unknown; reason?: unknown };\n const part = request.part === undefined || request.part === null ? null : request.part;\n if (part !== null && (typeof part !== 'string' || !validPartKey(part))) {\n return failure('assistant-validation', { part: ['invalid'] });\n }\n if (request.reason !== undefined && request.reason !== null && (typeof request.reason !== 'string' || request.reason.length > maxReason)) {\n return failure('assistant-validation', { reason: ['invalid'] });\n }\n\n const link = this.links.get(agentId);\n if (!link || link.parts.size === 0 || (part !== null && !link.parts.has(part))) {\n return failure('assistant-package-not-linked');\n }\n const unlinked = part === null ? [...link.parts.keys()] : [part];\n for (const key of unlinked) {\n link.parts.delete(key);\n link.local.add(key);\n }\n if (part === null) {\n link.local.add(NH_ASSISTANT_PACKAGE_LOCK_ALL);\n }\n return { status: 200, body: { agentId, packageId: link.packageId, parts: unlinked.sort() } };\n }\n\n /** Whether the agent still has a linked part, so it cannot be deleted or reset. */\n private isLinked(agentId: string): boolean {\n return (this.links.get(agentId)?.parts.size ?? 0) > 0;\n }\n\n /** The agent with the package it belongs to, while a part of it is linked. */\n private withAgentPackage(agent: AdminAgent): AdminAgent {\n const link = this.links.get(agent?.id);\n if (!link || link.parts.size === 0) {\n return agent;\n }\n const read = this.read(agent.id);\n const value: AgentPackageLink = {\n packageId: link.packageId,\n packageVersion: link.packageVersion,\n parts: [...link.parts.keys()].sort().map(part => this.partLinkOf(agent.id, part, link, read)!)\n };\n return { ...agent, package: value };\n }\n\n /** The item with the link of its part, or as it is when the part is not linked. */\n private withLink<T extends object>(agentId: string, part: string, item: T): T {\n const link = this.links.get(agentId);\n const value = link ? this.partLinkOf(agentId, part, link, null) : null;\n return value ? { ...item, package: value } : item;\n }\n\n private partLinkOf(agentId: string, part: string, link: AgentLink, read: HostRead | null): PackagePartLink | null {\n const partLink = link.parts.get(part);\n if (!partLink) {\n return null;\n }\n const host = read ?? this.read(agentId);\n return {\n part,\n packageId: link.packageId,\n packageVersion: partLink.packageVersion,\n lockedFields: [...partLink.lockedFields],\n hash: partLink.hash,\n changedLocally: host ? this.hostHash(host, part) !== partLink.hash : false,\n linkedAt: partLink.linkedAt,\n linkedBy: partLink.linkedBy\n };\n }\n\n /** What the mock has of one agent, read through its own endpoints; `null` for an unknown agent. */\n private read(agentId: string): HostRead | null {\n const agent = this.agents().find(item => item.id === agentId);\n if (!agent) {\n return null;\n }\n const path = `admin/agents/${encodeURIComponent(agentId)}`;\n const configuration = this.context.call('GET', `${path}/configuration`);\n const handOffs = this.context.call('GET', `${path}/hand-offs`);\n const metadata = this.context.call('GET', `${path}/metadata`);\n return {\n agent,\n configuration: configuration.status === 200 ? configuration.body as AgentRunConfiguration : null,\n handOffs: handOffs.status === 200 ? handOffs.body as AgentHandOffs : null,\n metadata: metadata.status === 200 ? metadata.body as AgentMetadata[] : []\n };\n }\n\n private agents(): AdminAgent[] {\n const result = this.context.call('GET', 'admin/agents');\n return result.status === 200 ? result.body as AdminAgent[] : [];\n }\n\n /** The SHA-256 of the canonical JSON of the host's part as a package holds it; `null` without the part. */\n private hostHash(read: HostRead, part: string): string | null {\n const value = partsOf(this.packageAgentOf(read)).get(part);\n return value === undefined ? null : mockSha256(canonicalJson(value));\n }\n\n /**\n * What a save may not change of a part: the agent's definition as it is in effect (for an agent in\n * code with its code's values), or the part as a package holds it.\n */\n private lockView(agentId: string, part: string): Record<string, unknown> | null {\n const read = this.read(agentId);\n if (!read) {\n return null;\n }\n if (part === 'agent') {\n return agentDefinitionOf(read.agent);\n }\n const value = partsOf(this.packageAgentOf(read)).get(part);\n return value === undefined ? null : part.startsWith('metadata:') ? { value } : value as Record<string, unknown>;\n }\n\n /** The agent as a package holds it, without locks and hashes. */\n private packageAgentOf(read: HostRead): PackageAgent {\n const { agent, configuration, handOffs, metadata } = read;\n const inCode = agent.source === 'code';\n const definition = inCode ? this.overlayOf(agent) : agentDefinitionOf(agent);\n const values = metadata.filter(entry => entry.source === (inCode ? 'override' : 'data'));\n // The projections are the format's JSON; the format's types name the same properties.\n const packageAgent: Record<string, unknown> = {\n id: agent.id,\n source: agent.source,\n ...(definition && Object.keys(definition).length > 0 ? { definition } : {}),\n ...(!inCode && configuration?.runSettings ? { runSettings: runSettingsOf(configuration.runSettings) } : {}),\n ...nonEmpty('skills', (configuration?.dataSkills ?? []).map(skillOf)),\n ...nonEmpty('triggers', (configuration?.dataTriggers ?? []).map(triggerOf)),\n ...nonEmpty('consultations', (configuration?.dataConsultations ?? []).map(consultationOf)),\n ...nonEmpty('handOffs', (handOffs?.dataHandOffs ?? []).map(handOff => ({\n subjectType: handOff.subjectType,\n sources: [...handOff.sources],\n description: handOff.description,\n notifySource: handOff.notifySource,\n maxPerSubjectPerDay: handOff.maxPerSubjectPerDay\n })))\n };\n if (values.length > 0) {\n packageAgent['metadata'] = Object.fromEntries(values.map(entry => [entry.name, entry.value]));\n }\n if (!agent.shadowOf && (agent.groups?.length ?? 0) > 0) {\n packageAgent['groups'] = [...agent.groups!];\n }\n return packageAgent as unknown as PackageAgent;\n }\n\n /** The overrides of an agent in code: the fields of its definition that differ from its code. */\n private overlayOf(agent: AdminAgent): Record<string, unknown> {\n const code = this.context.codeDefinition(agent.id);\n if (!code || !agent.isOverridden) {\n return {};\n }\n const definition = agent as unknown as Record<string, unknown>;\n const inCode = code as unknown as Record<string, unknown>;\n return Object.fromEntries(codeAgentFields\n .filter(field => !sameValue(definition[field], inCode[field]))\n .map(field => [field, definition[field]]));\n }\n}\n\n/** The part of the administration a request saves or removes, or the whole agent it deletes or resets. */\nfunction guardedPart(method: string, segments: readonly string[]): { agentId: string; part: string | null; removal: boolean; reset?: boolean } | null {\n if (segments[0] !== 'admin' || segments[1] !== 'agents' || segments[2] === undefined) {\n return null;\n }\n const [, , agentId, area, id, action, child] = segments;\n if (segments.length === 3) {\n return method === 'PUT' ? { agentId, part: 'agent', removal: false } : method === 'DELETE' ? { agentId, part: null, removal: true } : null;\n }\n // A reset restores the code's definition, which the locks keep as the package has it.\n if (area === 'reset' && segments.length === 4) {\n return method === 'POST' ? { agentId, part: 'agent', removal: false, reset: true } : null;\n }\n if (area === 'run-settings' && segments.length === 4) {\n return method === 'PUT' || method === 'DELETE' ? { agentId, part: 'runSettings', removal: method === 'DELETE' } : null;\n }\n\n const kinds: Record<string, AgentPackagePartKind> = {\n skills: 'skill',\n triggers: 'trigger',\n consultations: 'consultation',\n 'hand-offs': 'handOff',\n metadata: 'metadata'\n };\n const kind = area === undefined ? undefined : kinds[area];\n if (kind === undefined || id === undefined) {\n return null;\n }\n const part = `${kind}:${id}`;\n if (segments.length === 5) {\n return method === 'PUT' || method === 'DELETE' ? { agentId, part, removal: method === 'DELETE' } : null;\n }\n // Promoting a candidate makes it the live version, which the locks keep as the package has it.\n if ((kind === 'skill' || kind === 'trigger') && action === 'candidate' && child === 'promote' && segments.length === 7 && method === 'POST') {\n return { agentId, part, removal: false };\n }\n return null;\n}\n\n/**\n * The locked fields a save changed to something else than the package's value: promoting the\n * candidate an import made of the package's version is no change of a locked field.\n */\nfunction lockedChanges(\n kind: AgentPackagePartKind,\n locked: readonly string[],\n before: Record<string, unknown> | null,\n after: Record<string, unknown> | null,\n packaged: Record<string, unknown> | null\n): string[] {\n const fields = locked.includes(NH_ASSISTANT_PACKAGE_LOCK_ALL) ? NH_ASSISTANT_PACKAGE_LOCK_FIELDS[kind] : locked;\n return fields.filter(field => {\n const properties = lockProperties[kind][field] ?? [field];\n const changed = properties.some(property => !sameValue(before?.[property], after?.[property]));\n const asPackaged = packaged !== null && properties.every(property => sameValue(after?.[property], packaged[property]));\n return changed && !asPackaged;\n });\n}\n\n/** Why a lock of a package agent is invalid: `not-found` for a part it does not hold, `invalid` fields. */\nfunction lockProblem(agent: PackageAgent, part: string, fields: readonly string[]): 'not-found' | 'invalid' | null {\n if (fields.length === 0) {\n return null;\n }\n if (!partsOf(agent).has(part)) {\n return 'not-found';\n }\n const kind = kindOf(part);\n const allowed = kind === 'agent' && agent.source === 'code'\n ? NH_ASSISTANT_PACKAGE_LOCK_FIELDS.agent.slice(0, codeAgentFields.length)\n : NH_ASSISTANT_PACKAGE_LOCK_FIELDS[kind];\n const whole = fields.length === 1 && fields[0] === NH_ASSISTANT_PACKAGE_LOCK_ALL;\n return whole || fields.every(field => allowed.includes(field)) ? null : 'invalid';\n}\n\n/**\n * Why the agent of a package may not be imported onto the host's agent with its id, or `null`: an\n * agent of another package, an agent in code for an agent created here, or an agent created here that\n * the package neither linked nor takes over (`relink` naming the whole agent).\n */\nfunction agentRefusal(agent: PackageAgent, host: AdminAgent | null, linkedToPackage: boolean, otherPackage: boolean): string | null {\n if (otherPackage) {\n return 'assistant-agent-exists';\n }\n if (agent.source === 'code') {\n if (!host) {\n return 'assistant-agent-not-found';\n }\n return host.source === 'code' ? null : 'assistant-agent-not-code';\n }\n if (host && (host.source === 'code' || !linkedToPackage)) {\n return 'assistant-agent-exists';\n }\n return null;\n}\n\n/** The parts of a package agent by part key, in the format's order. */\nfunction partsOf(agent: PackageAgent): Map<string, unknown> {\n const parts = new Map<string, unknown>();\n if (agent.definition) {\n parts.set('agent', agent.definition);\n }\n if (agent.runSettings) {\n parts.set('runSettings', agent.runSettings);\n }\n for (const skill of agent.skills ?? []) {\n parts.set(`skill:${skill.id}`, skill);\n }\n for (const trigger of agent.triggers ?? []) {\n parts.set(`trigger:${trigger.id}`, trigger);\n }\n for (const consultation of agent.consultations ?? []) {\n parts.set(`consultation:${consultation.subjectType}`, consultation);\n }\n for (const handOff of agent.handOffs ?? []) {\n parts.set(`handOff:${handOff.subjectType}`, handOff);\n }\n for (const [name, value] of Object.entries(agent.metadata ?? {})) {\n parts.set(`metadata:${name}`, value);\n }\n return parts;\n}\n\nfunction kindOf(part: string): AgentPackagePartKind {\n const colon = part.indexOf(':');\n return (colon < 0 ? part : part.slice(0, colon)) as AgentPackagePartKind;\n}\n\nfunction keyOf(part: string): string {\n const colon = part.indexOf(':');\n return colon < 0 ? '' : part.slice(colon + 1);\n}\n\n/** Whether a part key names a known kind, with a dash-case key for the kinds that take one. */\nfunction validPartKey(part: string): boolean {\n if (part === 'agent' || part === 'runSettings') {\n return true;\n }\n const kind = kindOf(part);\n return ['skill', 'trigger', 'consultation', 'handOff', 'metadata'].includes(kind) && mockDashCase.test(keyOf(part));\n}\n\n/** The definition of an agent as a package holds an agent created here. */\nfunction agentDefinitionOf(agent: AdminAgent): Record<string, unknown> {\n return {\n displayName: agent.displayName,\n description: agent.description,\n instructions: agent.instructionsAsset ? null : agent.instructions,\n instructionsAsset: agent.instructionsAsset ?? null,\n toolSelectors: [...agent.toolSelectors],\n requiredPolicy: agent.requiredPolicy,\n autonomy: agent.autonomy,\n offeredInChat: agent.offeredInChat ?? true,\n worksOnSubjectTypes: agent.worksOnSubjectTypes ?? null,\n worksOnAllSubjects: agent.worksOnAllSubjects ?? null,\n worksOnApplication: agent.worksOnApplication ?? null,\n perDivision: agent.perDivision ?? null,\n runPolicy: agent.runPolicy ?? null,\n viewPolicy: agent.viewPolicy ?? null,\n profile: agent.profile ?? null,\n dataClassification: agent.dataClassification ?? null,\n shadowOf: agent.shadowOf ?? null\n };\n}\n\nfunction runSettingsOf(settings: NonNullable<AgentRunConfiguration['runSettings']>): Record<string, unknown> {\n return {\n accountability: settings.accountability,\n delegateFromInitiator: settings.delegateFromInitiator,\n allowGatewayReads: settings.allowGatewayReads,\n elevatedReads: settings.elevatedReads,\n approvalPolicy: settings.approvalPolicy,\n retryCount: settings.retryCount,\n dailyToolCalls: settings.dailyToolCalls,\n dailyTokens: settings.dailyTokens,\n maxConcurrentRuns: settings.maxConcurrentRuns,\n maxRunsPerSubjectPerDay: settings.maxRunsPerSubjectPerDay,\n maxTokensPerRun: settings.maxTokensPerRun,\n triageProfile: settings.triageProfile,\n ruleHandler: settings.ruleHandler,\n acceptsFiles: settings.acceptsFiles ?? false,\n maxFileBytes: settings.maxFileBytes ?? null,\n maxFilePages: settings.maxFilePages ?? null,\n maxFilesPerTurn: settings.maxFilesPerTurn ?? null,\n maxFileTokensPerTurn: settings.maxFileTokensPerTurn ?? null\n };\n}\n\nfunction skillOf(skill: AgentRunConfiguration['dataSkills'][number]): Record<string, unknown> {\n return {\n id: skill.skillId,\n description: skill.description,\n instructions: skill.instructionsAsset ? null : skill.instructions,\n instructionsAsset: skill.instructionsAsset ?? null,\n tools: [...skill.tools],\n profile: skill.profile,\n ruleHandler: skill.ruleHandler,\n maxTokensPerRun: skill.maxTokensPerRun,\n dailyToolCalls: skill.dailyToolCalls,\n dailyTokens: skill.dailyTokens,\n approvalPolicy: skill.approvalPolicy,\n dataClassification: skill.dataClassification ?? null,\n acceptsFiles: skill.acceptsFiles ?? false,\n maxFileBytes: skill.maxFileBytes ?? null,\n maxFilePages: skill.maxFilePages ?? null,\n maxFilesPerTurn: skill.maxFilesPerTurn ?? null,\n maxFileTokensPerTurn: skill.maxFileTokensPerTurn ?? null\n };\n}\n\nfunction triggerOf(trigger: AgentRunConfiguration['dataTriggers'][number]): Record<string, unknown> {\n return {\n id: trigger.triggerId,\n source: trigger.source,\n skill: trigger.skillId,\n event: trigger.event,\n filters: [...(trigger.filters ?? [])],\n cron: trigger.cron,\n timeZone: trigger.timeZone,\n subjectSet: trigger.subjectSet,\n message: trigger.message,\n conflict: trigger.conflict,\n debounceSeconds: trigger.debounceSeconds\n };\n}\n\nfunction consultationOf(consultation: NonNullable<AgentRunConfiguration['dataConsultations']>[number]): Record<string, unknown> {\n return {\n subjectType: consultation.subjectType,\n description: consultation.description,\n instructions: consultation.instructions,\n minimumRole: consultation.minimumRole,\n askerPolicy: consultation.askerPolicy,\n routes: [...consultation.routes],\n proposalRole: consultation.proposalRole,\n proposalPolicy: consultation.proposalPolicy,\n toolSelectors: consultation.toolSelectors ?? null,\n maxToolCalls: consultation.maxToolCalls,\n timeoutSeconds: consultation.timeoutSeconds,\n maxAnswerChars: consultation.maxAnswerChars,\n maxHistoryMessages: consultation.maxHistoryMessages,\n allowRequests: consultation.allowRequests,\n exposeToMcp: consultation.exposeToMcp,\n dataClassification: consultation.dataClassification\n };\n}\n\n/** `{ [name]: items }` for a list with items, otherwise nothing, as the format leaves empty lists out. */\nfunction nonEmpty<K extends string, T>(name: K, items: T[]): Partial<Record<K, T[]>> {\n return items.length > 0 ? { [name]: items } as Record<K, T[]> : {};\n}\n\n/**\n * Reads a package strictly, as the server does: `assistant-package-too-large` above 1 MB or 20\n * agents; `assistant-package-format-unsupported` for another format, a newer format version, an\n * unknown property, a missing required one or an agent id given twice.\n */\nfunction readPackage(value: unknown): { package: AgentPackage } | NhAssistantMockResult {\n if (!value || typeof value !== 'object' || Array.isArray(value)) {\n return failure('assistant-package-format-unsupported');\n }\n if (new TextEncoder().encode(JSON.stringify(value)).length > NH_ASSISTANT_AGENT_PACKAGE_MAX_BYTES) {\n return failure('assistant-package-too-large');\n }\n\n const root = value as Record<string, unknown>;\n if (root['format'] !== NH_ASSISTANT_AGENT_PACKAGE_FORMAT\n || typeof root['formatVersion'] !== 'number'\n || !Number.isInteger(root['formatVersion'])\n || root['formatVersion'] < 1\n || root['formatVersion'] > NH_ASSISTANT_AGENT_PACKAGE_FORMAT_VERSION) {\n return failure('assistant-package-format-unsupported');\n }\n const agents = root['agents'];\n if (!fits(root, 'root') || !fits(root['package'], 'package') || !Array.isArray(agents)) {\n return failure('assistant-package-format-unsupported');\n }\n if (agents.length > NH_ASSISTANT_AGENT_PACKAGE_MAX_AGENTS) {\n return failure('assistant-package-too-large');\n }\n\n const info = root['package'] as Record<string, unknown>;\n const ids = new Set<string>();\n for (const item of agents) {\n if (!fitsAgent(item)) {\n return failure('assistant-package-format-unsupported');\n }\n const id = (item as Record<string, unknown>)['id'] as string;\n if (ids.has(id)) {\n return failure('assistant-package-format-unsupported');\n }\n ids.add(id);\n }\n if (agents.length === 0) {\n return failure('assistant-package-format-unsupported');\n }\n\n const errors: Record<string, string[]> = {};\n if (typeof info['id'] !== 'string' || !mockDashCase.test(info['id']) || info['id'].length > maxPackageId) {\n errors['package.id'] = ['invalid'];\n }\n if (typeof info['version'] !== 'number' || !Number.isInteger(info['version']) || info['version'] < 1) {\n errors['package.version'] = ['invalid'];\n }\n if (info['description'] !== undefined && info['description'] !== null\n && (typeof info['description'] !== 'string' || info['description'].length > maxPackageDescription)) {\n errors['package.description'] = ['too-long'];\n }\n return Object.keys(errors).length > 0 ? failure('assistant-validation', errors) : { package: structuredClone(value) as AgentPackage };\n}\n\nfunction fitsAgent(value: unknown): boolean {\n if (!fits(value, 'agent')) {\n return false;\n }\n const agent = value as Record<string, unknown>;\n if (typeof agent['id'] !== 'string' || (agent['source'] !== 'admin' && agent['source'] !== 'code')) {\n return false;\n }\n if (agent['source'] === 'admin' && (agent['definition'] === undefined || agent['definition'] === null)) {\n return false;\n }\n const definition = agent['definition'] as Record<string, unknown> | undefined | null;\n if (definition !== undefined && definition !== null\n && (!fits(definition, 'definition') || (definition['instructionsAsset'] && !fits(definition['instructionsAsset'], 'instructionsAsset')))) {\n return false;\n }\n if (agent['runSettings'] !== undefined && agent['runSettings'] !== null && !fits(agent['runSettings'], 'runSettings')) {\n return false;\n }\n const lists: [string, string][] = [['skills', 'skill'], ['triggers', 'trigger'], ['consultations', 'consultation'], ['handOffs', 'handOff']];\n for (const [list, shape] of lists) {\n const items = agent[list];\n if (items !== undefined && items !== null && (!Array.isArray(items) || !items.every(item => fits(item, shape)))) {\n return false;\n }\n }\n for (const map of ['metadata', 'locks', 'hashes']) {\n const item = agent[map];\n if (item !== undefined && item !== null && (typeof item !== 'object' || Array.isArray(item))) {\n return false;\n }\n }\n const groups = agent['groups'];\n return groups === undefined || groups === null || (Array.isArray(groups) && groups.every(group => typeof group === 'string'));\n}\n\n/** Whether an object has every required property of its shape and none it does not know. */\nfunction fits(value: unknown, shape: keyof typeof formatShapes): boolean {\n if (!value || typeof value !== 'object' || Array.isArray(value)) {\n return false;\n }\n const { required, optional } = formatShapes[shape];\n const record = value as Record<string, unknown>;\n return required.every(name => record[name] !== undefined && record[name] !== null)\n && Object.keys(record).every(name => required.includes(name) || optional.includes(name));\n}\n\nfunction base(agentId: string, part: string, lockedFields: readonly string[]): PlannedPart {\n return {\n agentId,\n part,\n outcome: 'unchanged',\n changedLocally: false,\n code: null,\n errors: null,\n lockedFields: [...lockedFields],\n candidateVersion: null,\n hashAfter: null,\n viewAfter: null\n };\n}\n\nfunction leftBehind(agentId: string, part: string): PlannedPart {\n return { ...base(agentId, part, []), outcome: 'left-behind' };\n}\n\n/** A refused part with the endpoint's field errors, or its code without them. */\nfunction refusalOf(agentId: string, part: string, result: NhAssistantMockResult, lockedFields: readonly string[]): PlannedPart {\n const body = (result.body ?? {}) as { code?: string; errors?: Record<string, string[]> };\n const errors = body.errors && Object.keys(body.errors).length > 0 ? body.errors : null;\n return {\n ...base(agentId, part, lockedFields),\n outcome: 'refused',\n code: errors ? null : body.code ?? 'assistant-validation',\n errors\n };\n}\n\n/**\n * The field errors of `assistant-package-refused`, as the server answers them: one plain field, since\n * the preview's part outcomes say why each part was refused.\n */\nconst refusedErrors: Readonly<Record<string, string[]>> = { parts: ['invalid'] };\n\nfunction publicPart({ hashAfter: _, viewAfter: __, ...part }: PlannedPart): AgentPackagePart {\n return part;\n}\n\n/** A trimmed text, or `null` for none. */\nfunction text(value: unknown): string | null {\n return typeof value === 'string' && value.trim().length > 0 ? value.trim() : null;\n}\n\n/** Whether two values are the same as a package holds them: `null` and missing alike. */\nfunction sameValue(left: unknown, right: unknown): boolean {\n return canonicalJson(left ?? null) === canonicalJson(right ?? null);\n}\n\n/** A copy of a value without `null` and `undefined` properties, as the format writes it. */\nfunction withoutNulls<T>(value: T): T {\n if (Array.isArray(value)) {\n return value.map(item => withoutNulls(item)) as T;\n }\n if (value && typeof value === 'object') {\n return Object.fromEntries(Object.entries(value)\n .filter(([, item]) => item !== null && item !== undefined)\n .map(([key, item]) => [key, withoutNulls(item)])) as T;\n }\n return value;\n}\n\n/**\n * The canonical JSON of a value, as the format hashes a part: object properties ordered by name\n * (ordinal), properties with a `null` value left out, no white space.\n */\nexport function canonicalJson(value: unknown): string {\n if (value === null || value === undefined) {\n return 'null';\n }\n if (Array.isArray(value)) {\n return `[${value.map(item => canonicalJson(item)).join(',')}]`;\n }\n if (typeof value === 'object') {\n const entries = Object.entries(value as Record<string, unknown>)\n .filter(([, item]) => item !== null && item !== undefined)\n .sort(([left], [right]) => (left < right ? -1 : left > right ? 1 : 0));\n return `{${entries.map(([key, item]) => `${JSON.stringify(key)}:${canonicalJson(item)}`).join(',')}}`;\n }\n return JSON.stringify(value);\n}\n\nconst sha256Constants = new Uint32Array([\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,\n 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,\n 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,\n 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,\n 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,\n 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,\n 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2\n]);\n\n/**\n * The SHA-256 of the UTF-8 bytes of a text, lowercase hex, computed synchronously so an import can\n * hash its parts between two of its writes.\n */\nexport function mockSha256(input: string): string {\n const bytes = new TextEncoder().encode(input);\n const length = ((bytes.length + 9 + 63) >> 6) << 6;\n const data = new Uint8Array(length);\n data.set(bytes);\n data[bytes.length] = 0x80;\n const view = new DataView(data.buffer);\n view.setUint32(length - 8, Math.floor(bytes.length / 0x20000000));\n view.setUint32(length - 4, (bytes.length << 3) >>> 0);\n\n const hash = new Uint32Array([0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19]);\n const words = new Uint32Array(64);\n const rotate = (value: number, bits: number): number => (value >>> bits) | (value << (32 - bits));\n for (let offset = 0; offset < length; offset += 64) {\n for (let index = 0; index < 16; index++) {\n words[index] = view.getUint32(offset + index * 4);\n }\n for (let index = 16; index < 64; index++) {\n const low = words[index - 15];\n const high = words[index - 2];\n const s0 = rotate(low, 7) ^ rotate(low, 18) ^ (low >>> 3);\n const s1 = rotate(high, 17) ^ rotate(high, 19) ^ (high >>> 10);\n words[index] = (words[index - 16] + s0 + words[index - 7] + s1) >>> 0;\n }\n\n let [a, b, c, d, e, f, g, h] = hash;\n for (let index = 0; index < 64; index++) {\n const s1 = rotate(e, 6) ^ rotate(e, 11) ^ rotate(e, 25);\n const choice = (e & f) ^ (~e & g);\n const first = (h + s1 + choice + sha256Constants[index] + words[index]) >>> 0;\n const s0 = rotate(a, 2) ^ rotate(a, 13) ^ rotate(a, 22);\n const majority = (a & b) ^ (a & c) ^ (b & c);\n const second = (s0 + majority) >>> 0;\n h = g;\n g = f;\n f = e;\n e = (d + first) >>> 0;\n d = c;\n c = b;\n b = a;\n a = (first + second) >>> 0;\n }\n hash[0] = (hash[0] + a) >>> 0;\n hash[1] = (hash[1] + b) >>> 0;\n hash[2] = (hash[2] + c) >>> 0;\n hash[3] = (hash[3] + d) >>> 0;\n hash[4] = (hash[4] + e) >>> 0;\n hash[5] = (hash[5] + f) >>> 0;\n hash[6] = (hash[6] + g) >>> 0;\n hash[7] = (hash[7] + h) >>> 0;\n }\n return [...hash].map(word => word.toString(16).padStart(8, '0')).join('');\n}\n","import { AgentUploads, FileReference, NH_ASSISTANT_UPLOAD_HEADER, ɵnhAssistantMediaTypeOf } from '@newheap/platform-ai-chat';\nimport { NhAssistantMockResult, mockFailure } from './nh-assistant-mock-admin-shared';\n\n/** An upload as the application's file source receives it, after the assistant's checks. */\nexport interface NhAssistantMockUpload {\n conversationId: string;\n name: string;\n mediaType: string;\n size: number;\n}\n\n/** The longest file name a reference takes, as on the server. */\nconst maxNameLength = 256;\n\nconst mediaTypePattern = /^[a-z0-9][a-z0-9!#$&^_.+-]*\\/[a-z0-9][a-z0-9!#$&^_.+-]*$/;\n\nconst zipSignature = [0x50, 0x4b, 0x03, 0x04];\nconst pngSignature = [0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a];\nconst jpegSignature = [0xff, 0xd8, 0xff];\n\n/**\n * The binary formats a text upload may be in disguise, as on the server: an OLE2 compound file (Word,\n * Excel and PowerPoint 97 to 2003), a ZIP package (also an empty one), a PDF, PNG, JPEG or GIF.\n */\nconst binarySignatures = [\n [0xd0, 0xcf, 0x11, 0xe0, 0xa1, 0xb1, 0x1a, 0xe1],\n zipSignature,\n [0x50, 0x4b, 0x05, 0x06],\n [0x25, 0x50, 0x44, 0x46, 0x2d],\n pngSignature,\n jpegSignature,\n [0x47, 0x49, 0x46, 0x38, 0x37, 0x61],\n [0x47, 0x49, 0x46, 0x38, 0x39, 0x61]\n];\n\n/** How files of the platform's types start; other accepted types are the application's to check. */\nconst signatures: Record<string, (head: Uint8Array) => boolean> = {\n 'application/pdf': head => indexOf(head, [0x25, 0x50, 0x44, 0x46, 0x2d]) >= 0,\n 'image/png': head => startsWith(head, pngSignature),\n 'image/jpeg': head => startsWith(head, jpegSignature),\n 'application/vnd.openxmlformats-officedocument.wordprocessingml.document': head => startsWith(head, zipSignature),\n 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet': head => startsWith(head, zipSignature),\n 'application/vnd.openxmlformats-officedocument.presentationml.presentation': head => startsWith(head, zipSignature)\n};\n\n/**\n * Whether the content starts as files of the media type do: the signature of a platform type, and for\n * text (`text/*`, JSON and XML, also with a `+json` or `+xml` suffix) no binary signature. UTF-16 text\n * passes: there is no NUL-byte check.\n */\nfunction matchesSignature(head: Uint8Array, mediaType: string): boolean {\n if (isTextMediaType(mediaType)) {\n return !binarySignatures.some(signature => startsWith(head, signature));\n }\n\n return signatures[mediaType]?.(head) ?? true;\n}\n\nfunction isTextMediaType(mediaType: string): boolean {\n return mediaType.startsWith('text/')\n || mediaType === 'application/json'\n || mediaType === 'application/xml'\n || mediaType.endsWith('+json')\n || mediaType.endsWith('+xml');\n}\n\n/**\n * The files of the mock API: `POST conversations/{id}/files` with the server's checks, and the\n * attachments of a message, which a turn opens again as the server's file source would.\n */\nexport class NhAssistantMockFiles {\n private readonly stored = new Map<string, NhAssistantMockUpload & { reference: FileReference }>();\n private next = 0;\n\n constructor(\n private readonly refuse?: (upload: NhAssistantMockUpload) => string | null,\n private readonly scan?: (upload: NhAssistantMockUpload) => 'refused' | 'failed' | null\n ) {}\n\n /** The uploads the mock stored, oldest first. */\n get uploads(): readonly (NhAssistantMockUpload & { reference: FileReference })[] {\n return [...this.stored.values()];\n }\n\n /**\n * Checks an upload as the server does, in its order: a file source, an agent that accepts files,\n * the upload header, one file part named `file` with a name and content, an accepted media type\n * whose content matches, the agent's largest size, the application's scanner, and finally the\n * application's own refusal.\n */\n async upload(\n conversationId: string,\n offered: boolean,\n uploads: AgentUploads | null,\n headers: Record<string, string>,\n form: FormData\n ): Promise<NhAssistantMockResult> {\n if (!offered) {\n return mockFailure('assistant-files-unavailable');\n }\n if (!uploads) {\n return mockFailure('assistant-files-not-accepted');\n }\n\n const header = Object.entries(headers).find(([name]) => name.toLowerCase() === NH_ASSISTANT_UPLOAD_HEADER.toLowerCase());\n let parts = 0;\n form.forEach(() => parts++);\n const file = form.get('file');\n if (!header?.[1] || parts !== 1 || !(file instanceof Blob)) {\n return mockFailure('assistant-file-upload-invalid');\n }\n\n const name = nameOf(file instanceof File ? file.name : '');\n if (name === null || file.size === 0) {\n return mockFailure('assistant-file-upload-invalid');\n }\n // A missing or generic type takes the accepted type of the file name's extension, as on the server.\n const mediaType = normalizeMediaType(ɵnhAssistantMediaTypeOf({ name, type: file.type }, uploads.acceptedMediaTypes, uploads.mappedExtensions));\n if (mediaType === null || !uploads.acceptedMediaTypes.includes(mediaType)) {\n return mockFailure('assistant-file-type-not-accepted');\n }\n if (file.size > uploads.maxFileBytes) {\n return mockFailure('assistant-file-too-large');\n }\n const head = new Uint8Array(await file.slice(0, 1024).arrayBuffer());\n if (!matchesSignature(head, mediaType)) {\n return mockFailure('assistant-file-type-not-accepted');\n }\n\n const upload: NhAssistantMockUpload = { conversationId, name, mediaType, size: file.size };\n // The application's scanner sees the file before its file source stores anything.\n const scanned = this.scan?.(upload) ?? null;\n if (scanned) {\n return mockFailure(scanned === 'refused' ? 'assistant-file-scan-refused' : 'assistant-file-upload-failed');\n }\n const refusal = this.refuse?.(upload) ?? null;\n if (refusal) {\n return mockFailure(refusalCode(refusal));\n }\n\n this.next++;\n const reference: FileReference = { id: `mock-file-${this.next}`, name, mediaType, size: file.size, hash: null };\n this.stored.set(reference.id, { ...upload, reference });\n return { status: 200, body: reference };\n }\n\n /**\n * The code the server refuses a message's `files` with before the turn starts, or `null`: without\n * a file source, more files than one message carries, or a reference that is not one.\n */\n checkMessage(files: unknown, offered: boolean, maxFiles: number): string | null {\n if (files === undefined || files === null || (Array.isArray(files) && files.length === 0)) {\n return null;\n }\n if (!Array.isArray(files)) {\n return 'assistant-file-reference-invalid';\n }\n if (!offered) {\n return 'assistant-files-unavailable';\n }\n if (files.length > maxFiles) {\n return 'assistant-file-count-limit';\n }\n\n return files.every(isReference) ? null : 'assistant-file-reference-invalid';\n }\n\n /**\n * The code of the first attachment the turn cannot open, as the server's file source refuses it,\n * or `null` when it opens them all. A reference the mock never stored, or one of another\n * conversation, is not found.\n */\n openCode(conversationId: string, files: readonly FileReference[]): string | null {\n const missing = files.find(file => this.stored.get(file.id)?.conversationId !== conversationId);\n return missing ? 'assistant-file-not-found' : null;\n }\n}\n\n/** The file name without a path; `null` when nothing usable is left, as on the server. */\nfunction nameOf(fileName: string): string | null {\n const name = fileName.slice(Math.max(fileName.lastIndexOf('/'), fileName.lastIndexOf('\\\\')) + 1).trim();\n return name.length === 0 || name.length > maxNameLength || /[\\u0000-\\u001f\\u007f]/.test(name) ? null : name;\n}\n\nfunction normalizeMediaType(value: string): string | null {\n const essence = value.split(';')[0].trim().toLowerCase();\n return essence.length <= 128 && mediaTypePattern.test(essence) ? essence : null;\n}\n\nfunction isReference(value: unknown): value is FileReference {\n const file = value as Partial<FileReference> | null;\n return !!file\n && isText(file.id)\n && isText(file.name)\n && typeof file.mediaType === 'string' && normalizeMediaType(file.mediaType) !== null\n && typeof file.size === 'number' && file.size >= 0;\n}\n\nfunction isText(value: unknown): value is string {\n return typeof value === 'string' && value.trim().length > 0 && value.length <= maxNameLength && !/[\\u0000-\\u001f\\u007f]/.test(value);\n}\n\n/** The application's refusal as the server passes it on. */\nfunction refusalCode(code: string): string {\n switch (code) {\n case 'assistant-files-unavailable':\n case 'assistant-file-too-large':\n return code;\n case 'assistant-file-type-not-accepted':\n case 'assistant-file-type-not-supported':\n return 'assistant-file-type-not-accepted';\n case 'assistant-file-upload-failed':\n case 'assistant-file-unavailable':\n return 'assistant-file-upload-failed';\n default:\n return 'assistant-file-upload-refused';\n }\n}\n\nfunction startsWith(head: Uint8Array, signature: number[]): boolean {\n return head.length >= signature.length && signature.every((byte, index) => head[index] === byte);\n}\n\nfunction indexOf(head: Uint8Array, signature: number[]): number {\n for (let start = 0; start + signature.length <= head.length; start++) {\n if (signature.every((byte, index) => head[start + index] === byte)) {\n return start;\n }\n }\n return -1;\n}\n","import { AgentSubjectSearch, AgentSubjectType, AgentSubjectWork, AgentSubjectWorkProposal } from '@newheap/platform-ai-chat';\nimport { NhAssistantMockDivision, NhAssistantMockSubjectType } from './nh-assistant-mock.models';\nimport { mockFailure as failure } from './nh-assistant-mock-admin-shared';\n\n/** A mock response: status plus optional JSON body. */\ninterface MockResult {\n status: number;\n body?: unknown;\n}\n\nconst dashCase = /^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/;\nconst minQueryLength = 2;\nconst maxQueryLength = 100;\nconst defaultLimit = 20;\nconst maxLimit = 50;\nconst placeholder = '{id}';\n\n/** The platform's type of the whole application, which the server registers itself. */\nconst systemType = 'nh-system';\n/** The whole application as one subject, for agents that work app-wide. */\nconst systemGlobalId = 'global';\n/** The whole application in one division, for agents that work per division. */\nconst divisionPrefix = 'division-';\nconst systemNames: Record<string, string> = { en: 'The whole application', nl: 'De hele applicatie' };\n\n/** A subject as the mock's resolvers describe it to the caller. */\nexport interface NhAssistantMockDescribedSubject {\n subjectType: string;\n subjectId: string;\n displayName: string;\n typeName: string | null;\n link: string | null;\n role: 'reader' | 'participant' | 'approver';\n /** The whole application app-wide (`global`) or in one division. */\n scope: 'object' | 'global' | 'division';\n}\n\n/**\n * The subject types of the mock API, as the application's resolvers describe them on the server:\n * their names per language in the run catalog, the search people use to choose a subject and the\n * name of a subject chosen by id. The scenario is checked like the server checks the registration\n * at startup, and every request is checked like the server checks it. Next to the scenario's types\n * the catalog lists the platform's `nh-system`, the whole application, as the server does: app-wide\n * as `nh-system/global`, and with the scenario's `divisions` per division, which people then find\n * by name.\n */\nexport class NhAssistantMockSubjects {\n private readonly types: NhAssistantMockSubjectType[];\n private readonly divisions: NhAssistantMockDivision[];\n\n constructor(\n types: readonly NhAssistantMockSubjectType[] = [],\n divisions: readonly NhAssistantMockDivision[] = [],\n private readonly openProposals: (subjectType: string, subjectId: string) => AgentSubjectWorkProposal[] = () => []\n ) {\n const ids = new Set<string>();\n for (const type of types) {\n if (!dashCase.test(type.id) || type.id.length > 100) {\n throw new Error(`Mock subject type '${type.id}' is not a dash-case id of at most 100 characters.`);\n }\n if (type.id.startsWith('nh-')) {\n throw new Error(`Mock subject type '${type.id}' starts with 'nh-', which the platform reserves.`);\n }\n if (ids.has(type.id)) {\n throw new Error(`Mock subject type '${type.id}' is listed twice.`);\n }\n ids.add(type.id);\n validateNames(type.id, type.names, type.fallbackLanguage ?? 'en');\n validateNames(type.id, type.pluralNames, type.fallbackLanguage ?? 'en');\n if (type.pluralNames && !type.names) {\n throw new Error(`Mock subject type '${type.id}' has plural names but no names.`);\n }\n if (type.link != null && !isValidLinkTemplate(type.link)) {\n throw new Error(`Mock subject type '${type.id}' has an invalid link template '${type.link}'.`);\n }\n }\n this.types = [...types].sort((left, right) => left.id.localeCompare(right.id));\n for (const division of divisions) {\n if (!/^[0-9a-f]{8}-?[0-9a-f]{4}-?[0-9a-f]{4}-?[0-9a-f]{4}-?[0-9a-f]{12}$/i.test(division.id)) {\n throw new Error(`Mock division '${division.id}' is not a GUID.`);\n }\n }\n this.divisions = [...divisions].sort((left, right) => left.name.localeCompare(right.name));\n }\n\n /**\n * The subject as the caller sees it, or `null` when it does not exist or the caller may not read\n * it; `undefined` for an unknown type. The caller reads the whole application, and decides there\n * as an administrator.\n */\n describe(typeId: string, subjectId: string, language: string | null, administrator: boolean): NhAssistantMockDescribedSubject | null | undefined {\n if (typeId === systemType) {\n const name = systemName(language);\n if (subjectId === systemGlobalId) {\n return { subjectType: systemType, subjectId, displayName: name, typeName: name, link: null, role: administrator ? 'approver' : 'reader', scope: 'global' };\n }\n const division = this.division(subjectId);\n return division\n ? { subjectType: systemType, subjectId, displayName: division.name, typeName: name, link: null, role: administrator ? 'approver' : 'reader', scope: 'division' }\n : null;\n }\n const type = this.types.find(item => item.id === typeId);\n if (!type) {\n return undefined;\n }\n const subject = (type.subjects ?? []).find(item => item.id === subjectId && item.readable !== false);\n return subject\n ? {\n subjectType: type.id,\n subjectId: subject.id,\n displayName: subject.displayName,\n typeName: type.names ? pick(type.names, type.fallbackLanguage ?? 'en', language) : null,\n link: linkFor(type, subject.id),\n role: subject.role ?? 'participant',\n scope: 'object'\n }\n : null;\n }\n\n /** A listed division the caller works in, by the id of its subject `division-{id:N}`. */\n private division(subjectId: string): NhAssistantMockDivision | undefined {\n return this.divisions.find(division => division.readable !== false && divisionSubjectId(division) === subjectId);\n }\n\n /** The run catalog's subject types in the request's language, the platform's among them, by id. */\n catalog(language: string | null): AgentSubjectType[] {\n const application: AgentSubjectType[] = this.types.map(type => ({\n id: type.id,\n name: pick(type.names, type.fallbackLanguage ?? 'en', language) ?? type.id,\n pluralName: pick(type.pluralNames, type.fallbackLanguage ?? 'en', language),\n entityType: type.entityType ?? null,\n entityTypeFull: type.entityTypeFull ?? null,\n link: type.link ?? null,\n searchable: isSearchable(type),\n isSystem: false\n }));\n const system: AgentSubjectType = {\n id: systemType,\n name: systemName(language),\n pluralName: null,\n entityType: null,\n entityTypeFull: null,\n link: null,\n // With listed divisions the whole application is searched for them.\n searchable: this.divisions.length > 0,\n isSystem: true\n };\n return [...application, system].sort((left, right) => left.id.localeCompare(right.id));\n }\n\n /** `GET subjects/{type}/search` and `GET subjects/{type}/{id}/work`; `null` for other paths. */\n handle(method: string, segments: string[], query: URLSearchParams, language: string | null): MockResult | null {\n if (segments.length === 3 && segments[2] === 'search') {\n return method === 'GET' ? this.search(segments[1], query) : { status: 405 };\n }\n if (segments.length === 4 && segments[3] === 'work') {\n return method === 'GET' ? this.work(segments[1], segments[2], language) : { status: 405 };\n }\n return null;\n }\n\n private search(typeId: string, query: URLSearchParams): MockResult {\n const type = this.types.find(item => item.id === typeId);\n if (!type && typeId !== systemType) {\n return failure('assistant-subject-type-unknown');\n }\n const text = (query.get('query') ?? '').trim();\n if (text.length < minQueryLength || text.length > maxQueryLength) {\n return failure('assistant-validation', { query: ['invalid'] });\n }\n // The whole application is not searched, but its divisions are, when the application lists them.\n if (!type) {\n return this.divisions.length > 0 ? this.searchDivisions(text, query) : failure('assistant-subject-search-unavailable');\n }\n if (!isSearchable(type)) {\n return failure('assistant-subject-search-unavailable');\n }\n\n const limit = Math.min(Math.max(Number(query.get('limit') ?? defaultLimit) || defaultLimit, 1), maxLimit);\n const lowered = text.toLocaleLowerCase();\n const items = (type.subjects ?? [])\n .filter(subject => subject.readable !== false)\n .filter(subject => subject.displayName.toLocaleLowerCase().includes(lowered) || subject.id.toLocaleLowerCase().includes(lowered))\n .slice(0, limit)\n .map(subject => ({\n type: type.id,\n id: subject.id,\n displayName: subject.displayName,\n scopeKey: subject.scopeKey ?? 'global',\n divisionId: subject.divisionId ?? null,\n link: linkFor(type, subject.id)\n }));\n const body: AgentSubjectSearch = { subjectType: type.id, items };\n return { status: 200, body };\n }\n\n /** The divisions the caller works in whose name contains the text, ordered by name. */\n private searchDivisions(text: string, query: URLSearchParams): MockResult {\n const limit = Math.min(Math.max(Number(query.get('limit') ?? defaultLimit) || defaultLimit, 1), maxLimit);\n const lowered = text.toLocaleLowerCase();\n const items = this.divisions\n .filter(division => division.readable !== false && division.name.toLocaleLowerCase().includes(lowered))\n .slice(0, limit)\n .map(division => ({\n type: systemType,\n id: divisionSubjectId(division),\n displayName: division.name,\n scopeKey: `division:${guidN(division.id)}`,\n divisionId: division.id,\n link: null\n }));\n const body: AgentSubjectSearch = { subjectType: systemType, items };\n return { status: 200, body };\n }\n\n /**\n * The name of a subject chosen by id and the proposals the scenario lists on it; the mock runs no\n * agents, so it has no other agent work. A malformed reference is invalid, an unknown or unreadable\n * subject not found.\n */\n private work(typeId: string, subjectId: string, language: string | null): MockResult {\n if (!dashCase.test(typeId) || typeId.length > 100 || subjectId.trim().length === 0 || subjectId.length > 200 || subjectId.trim() !== subjectId) {\n return failure('assistant-subject-invalid');\n }\n if (typeId === systemType) {\n return this.systemWork(subjectId, language);\n }\n const type = this.types.find(item => item.id === typeId);\n if (!type) {\n return failure('assistant-subject-type-unknown');\n }\n const subject = (type.subjects ?? []).find(item => item.id === subjectId && item.readable !== false);\n if (!subject) {\n return failure('assistant-subject-not-found');\n }\n\n const body: AgentSubjectWork = {\n subjectType: type.id,\n subjectId: subject.id,\n subjectDisplayName: subject.displayName,\n subjectTypeName: type.names ? pick(type.names, type.fallbackLanguage ?? 'en', language) : null,\n subjectLink: linkFor(type, subject.id),\n role: 'reader',\n agents: [],\n openProposals: this.openProposals(type.id, subject.id)\n };\n return { status: 200, body };\n }\n\n /**\n * The whole application as the server names it: \"The whole application\" in the reader's language,\n * without a link, and in a division the division's name. A division the scenario does not list, or\n * that the caller does not work in, is not found.\n */\n private systemWork(subjectId: string, language: string | null): MockResult {\n const division = subjectId === systemGlobalId ? null : this.division(subjectId);\n if (subjectId !== systemGlobalId && !division) {\n return failure('assistant-subject-not-found');\n }\n\n const name = systemName(language);\n const body: AgentSubjectWork = {\n subjectType: systemType,\n subjectId,\n subjectDisplayName: division?.name ?? name,\n subjectTypeName: name,\n subjectLink: null,\n role: 'reader',\n agents: [],\n openProposals: this.openProposals(systemType, subjectId)\n };\n return { status: 200, body };\n }\n}\n\n/** The name of the whole application in the request's language, English otherwise. */\nfunction systemName(language: string | null): string {\n return pick(systemNames, 'en', language) ?? systemNames['en'];\n}\n\n/** The subject of the whole application in a division: `division-` and the id without dashes. */\nexport function divisionSubjectId(division: NhAssistantMockDivision): string {\n return divisionPrefix + guidN(division.id);\n}\n\nfunction guidN(id: string): string {\n return id.replace(/-/g, '').toLowerCase();\n}\n\nfunction isSearchable(type: NhAssistantMockSubjectType): boolean {\n return type.searchable ?? (type.subjects?.length ?? 0) > 0;\n}\n\nfunction linkFor(type: NhAssistantMockSubjectType, subjectId: string): string | null {\n return type.link ? type.link.replace(placeholder, encodeURIComponent(subjectId)) : null;\n}\n\nfunction validateNames(typeId: string, names: Record<string, string> | undefined, fallbackLanguage: string): void {\n if (!names) {\n return;\n }\n for (const [language, name] of Object.entries(names)) {\n if (!/^[A-Za-z]{2,8}(-[A-Za-z0-9]{1,8})*$/.test(language)) {\n throw new Error(`Mock subject type '${typeId}' has a name in '${language}', which is not a culture name.`);\n }\n if (name.trim().length === 0 || name.trim().length > 100) {\n throw new Error(`Mock subject type '${typeId}' has a name in '${language}' that is empty or longer than 100 characters.`);\n }\n }\n if (!Object.keys(names).some(language => language.toLowerCase() === fallbackLanguage.toLowerCase())) {\n throw new Error(`Mock subject type '${typeId}' has no name in its fallback language '${fallbackLanguage}'.`);\n }\n}\n\n/** The name in the language, another culture of that language, else the fallback language, as the server picks. */\n/** A text in the request's language: the culture, its language, another culture of it, else the fallback language. */\nexport function mockPickText(names: Record<string, string> | undefined, fallbackLanguage: string, language: string | null): string | null {\n return pick(names, fallbackLanguage, language);\n}\n\nfunction pick(names: Record<string, string> | undefined, fallbackLanguage: string, language: string | null): string | null {\n if (!names) {\n return null;\n }\n const entries = Object.entries(names);\n const find = (wanted: string) => entries.find(([key]) => key.toLowerCase() === wanted.toLowerCase())?.[1];\n const requested = language?.split(',')[0]?.split(';')[0]?.trim() ?? '';\n const base = requested.split('-')[0];\n return (requested ? find(requested) : undefined)\n ?? (base ? find(base) : undefined)\n ?? (base ? entries.filter(([key]) => key.split('-')[0].toLowerCase() === base.toLowerCase()).sort(([left], [right]) => left.localeCompare(right))[0]?.[1] : undefined)\n ?? find(fallbackLanguage)\n ?? null;\n}\n\n/** One `{id}` in a path that starts with one slash, or in the path or query of an `https` address. */\nfunction isValidLinkTemplate(template: string): boolean {\n if (/[\\s{}]/.test(template.split(placeholder).join('')) || template.split(placeholder).length !== 2) {\n return false;\n }\n if (template.startsWith('/')) {\n return template.length > 1 && template[1] !== '/' && template[1] !== '\\\\';\n }\n if (!template.toLowerCase().startsWith('https://')) {\n return false;\n }\n const pathStart = template.indexOf('/', 'https://'.length);\n return pathStart > 0 && template.indexOf(placeholder) > pathStart;\n}\n","import {\n AdminAgent,\n AgentConsultationList,\n AgentLatestRun,\n AgentProposal,\n AgentObjectAgent,\n AgentObjectAgents,\n AgentRun,\n AgentRunHistory,\n AgentRunHistoryItem,\n AgentRunMcpSkip,\n AgentRunResult,\n AgentRunStatus,\n AgentThread,\n AgentThreadLookup,\n AgentTriggerReceipt,\n LiveAgentWorkChanged\n} from '@newheap/platform-ai-chat';\nimport { NhAssistantMockRun, NhAssistantMockRunNow, NhAssistantMockScenario } from './nh-assistant-mock.models';\nimport { NhAssistantMockResult, mockFailure as failure } from './nh-assistant-mock-admin-shared';\nimport { NhAssistantMockDescribedSubject, NhAssistantMockSubjects, mockPickText } from './nh-assistant-mock-subjects';\nimport { mockSystemSubjectType, mockWorksOnCovers } from './nh-assistant-mock-works-on';\n\n/** What the agent runs read of the mock's agents and caller. */\nexport interface NhAssistantMockAgentRunContext {\n /** Every agent of the administration. */\n agents(): AdminAgent[];\n /** Whether the caller passes the administration policy. */\n administers(): boolean;\n /** The scenario's proposals in a thread; `null` when it lists none there. */\n threadProposals?(conversationId: string): AgentProposal[] | null;\n /** The scenario's consultations of a thread's agent; `null` when it lists none there. */\n threadConsultations?(conversationId: string): AgentConsultationList | null;\n /** The scenario's proposals of a run, also those it placed at other objects, oldest first. */\n runProposals?(runId: string): AgentProposal[];\n /** Announces that an agent's work changed, as the server's live updates do. */\n workChanged?(change: LiveAgentWorkChanged, agentId: string): void;\n}\n\ninterface StoredThread {\n conversationId: string;\n agentId: string;\n subject: NhAssistantMockDescribedSubject;\n runs: AgentRun[];\n openProposals: number;\n /** The agent's shadow thread, which only administrators see. */\n shadow?: boolean;\n}\n\n/** A request's agent and subject, read as the server reads them, or why they cannot be. */\ntype SubjectRead =\n | { failure: NhAssistantMockResult }\n | { agent: AdminAgent; subject: NhAssistantMockDescribedSubject | null };\n\nconst dashCase = /^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/;\nconst maxMessage = 8_000;\nconst maxSubjectId = 200;\nconst maxAgentId = 128;\nconst resultPreview = 300;\nconst maxResult = 20_000;\nconst maxItemsPerPage = 50;\nconst dayMs = 24 * 60 * 60 * 1000;\nconst activeStatuses = ['queued', 'running', 'waiting-for-approval'];\nconst retryableStatuses = ['failed', 'cancelled'];\nconst runStatuses: readonly AgentRunStatus[] = ['queued', 'running', 'waiting-for-approval', 'completed', 'failed', 'cancelled'];\n\n/** A run history's filter as the server reads it. */\ninterface RunFilter {\n agentId: string | null;\n subjectType: string | null;\n subjectId: string | null;\n status: string | null;\n from: number | null;\n to: number | null;\n page: number;\n itemsPerPage: number;\n}\n\n/**\n * Agents run by hand in the mock API, which runs no agents itself: `POST threads/start` checks who\n * may run the agent as the server does (on an object the participant role, on the whole application\n * the agent's run policy, by default the administration policy; what the agent works on, with its\n * scope; its required policy; shadow for administrators only), then the agent's state: a stopped\n * agent or one disabled in code is refused with `409`, a paused one answers `202 waiting` with\n * `assistant-agent-paused`, and `runNow.dailyLimit` refuses more runs a day with `409\n * assistant-trigger-rate-limited`. Otherwise it records a run that ends at once as the scenario's\n * `runNow` says, and `GET subjects/{type}/{id}/agents`, `GET threads` and the thread's runs show it.\n * `POST threads/open` creates the thread without a run for whoever may start the agent;\n * `POST runs/{id}/cancel` and `POST runs/{id}/retry` cancel, resume or restart a run with the server's\n * roles. The thread's memory, artifacts and consultations are empty; its proposals are those the\n * scenario lists in it. The scenario's `runs` happened before; `GET runs`, `GET runs/{id}` and the\n * administration's `GET admin/agents/{id}/runs` list them and the runs by hand, with the server's\n * filters, field errors and visibility.\n */\nexport class NhAssistantMockAgentRuns {\n private readonly threads = new Map<string, StoredThread>();\n /** The answer of each run, by run id, at most 20,000 characters. */\n private readonly results = new Map<string, string | null>();\n /** The answer per culture of the runs whose rules wrote it per culture, by run id. */\n private readonly localizedResults = new Map<string, Readonly<Record<string, string>>>();\n /** The runs whose answer was longer and was cut. */\n private readonly truncated = new Set<string>();\n /** The personal MCP servers each run left out, by run id. */\n private readonly mcpSkips = new Map<string, AgentRunMcpSkip[]>();\n private sequence = 0;\n\n constructor(\n private readonly scenario: NhAssistantMockScenario,\n private readonly subjects: NhAssistantMockSubjects,\n private readonly context: NhAssistantMockAgentRunContext,\n private readonly now: () => string\n ) {\n for (const seeded of scenario.runs ?? []) {\n this.seed(seeded);\n }\n }\n\n /**\n * `GET runs`, `GET runs/{id}`, `GET runs/{id}/artifacts/{id}/content`, `POST runs/{id}/cancel` and\n * `POST runs/{id}/retry`; `null` for other paths.\n */\n handleRuns(method: string, segments: string[], query: URLSearchParams, body: unknown, language: string | null): NhAssistantMockResult | null {\n if (segments[0] !== 'runs' || ![1, 2, 3, 5].includes(segments.length)) {\n return null;\n }\n if (segments.length === 3) {\n if (segments[2] !== 'cancel' && segments[2] !== 'retry') {\n return null;\n }\n if (method !== 'POST') {\n return { status: 405 };\n }\n return segments[2] === 'cancel' ? this.cancel(segments[1], language) : this.retry(segments[1], body, language);\n }\n if (method !== 'GET') {\n return segments.length === 1 || segments.length === 2 ? { status: 405 } : null;\n }\n if (segments.length === 1) {\n const read = readFilter(query, true);\n if ('errors' in read) {\n return failure('assistant-run-filter-invalid', read.errors);\n }\n return { status: 200, body: this.history(read.filter, language, false) };\n }\n\n const found = this.findRun(segments[1]);\n if (!found || !(this.context.administers() || this.mayView(found.thread, language))) {\n return failure('assistant-run-not-found');\n }\n if (segments.length === 5) {\n // The mock's runs save no files.\n return segments[2] === 'artifacts' && segments[4] === 'content' ? failure('assistant-artifact-not-found') : null;\n }\n\n const result: AgentRunResult = {\n run: this.toHistoryItem(found.thread, found.run, language),\n result: this.answerOf(found.run.id, language),\n resultTruncated: this.truncated.has(found.run.id),\n summary: found.run.summary,\n proposals: this.context.runProposals?.(found.run.id) ?? [],\n hiddenProposals: 0,\n artifacts: [],\n canOpenConversation: this.mayView(found.thread, language)\n };\n return { status: 200, body: result };\n }\n\n /**\n * `GET admin/agents/{id}/runs`: every run of the agent, for administrators. The filter is checked\n * before the agent, as on the server.\n */\n handleAgentRuns(method: string, agentId: string, query: URLSearchParams, language: string | null): NhAssistantMockResult {\n if (method !== 'GET') {\n return { status: 405 };\n }\n if (!this.context.administers()) {\n return failure('assistant-forbidden');\n }\n const read = readFilter(query, false);\n if ('errors' in read) {\n return failure('assistant-run-filter-invalid', read.errors);\n }\n if (!this.context.agents().some(agent => agent.id === agentId)) {\n return failure('assistant-agent-not-found');\n }\n return { status: 200, body: this.history({ ...read.filter, agentId }, language, true) };\n }\n\n /** `POST threads/start`, `POST threads/open`, `GET threads` and `GET threads/{id}/…`; `null` for other paths. */\n handleThreads(method: string, segments: string[], query: URLSearchParams, body: unknown, language: string | null): NhAssistantMockResult | null {\n if (segments.length === 2 && segments[1] === 'start') {\n return method === 'POST' ? this.start(body, language) : { status: 405 };\n }\n if (segments.length === 2 && segments[1] === 'open') {\n return method === 'POST' ? this.open(body, language) : { status: 405 };\n }\n if (segments.length === 1) {\n return method === 'GET' ? this.lookup(query, language) : { status: 405 };\n }\n if (segments.length === 3 && method === 'GET') {\n const listed = segments[2] === 'proposals'\n ? this.context.threadProposals?.(segments[1]) ?? null\n : segments[2] === 'consultations' ? this.context.threadConsultations?.(segments[1]) ?? null : null;\n if (listed) {\n return { status: 200, body: listed };\n }\n const thread = this.threadOf(segments[1]);\n if (!thread) {\n return failure('assistant-conversation-not-found');\n }\n switch (segments[2]) {\n case 'runs':\n return { status: 200, body: { items: [...thread.runs].reverse(), total: thread.runs.length } };\n case 'proposals':\n case 'artifacts':\n return { status: 200, body: [] };\n case 'memory':\n return { status: 200, body: { configured: false, schemaVersion: 1, memory: null, updatedAt: null } };\n case 'consultations':\n return { status: 200, body: { items: [], total: 0 } };\n default:\n return null;\n }\n }\n return null;\n }\n\n /** `GET subjects/{type}/{id}/agents`; `null` for other paths. */\n handleSubjects(method: string, segments: string[], language: string | null): NhAssistantMockResult | null {\n if (segments.length !== 4 || segments[3] !== 'agents') {\n return null;\n }\n if (method !== 'GET') {\n return { status: 405 };\n }\n\n const [, type, id] = segments;\n if (!validSubject(type, id)) {\n return failure('assistant-subject-invalid');\n }\n const subject = this.subjects.describe(type, id, language, this.context.administers());\n if (subject === undefined) {\n return failure('assistant-subject-type-unknown');\n }\n if (subject === null) {\n return failure('assistant-subject-not-found');\n }\n\n const agents: AgentObjectAgent[] = this.context.agents()\n .filter(agent => this.isWorking(agent) && this.mayUse(agent) && worksOn(agent, subject) && (!agent.shadowOf || this.context.administers()))\n .sort((left, right) => left.id.localeCompare(right.id))\n .map(agent => {\n const thread = this.threads.get(key(agent.id, subject));\n return {\n agentId: agent.id,\n displayNameKey: this.nameKeyOf(agent),\n descriptionKey: agent.source === 'code'\n ? this.scenario.agents.find(item => item.id === agent.id)?.descriptionKey ?? agent.description\n : agent.description,\n canStart: this.canStart(agent, subject),\n conversationId: thread?.conversationId ?? null,\n latestRun: thread ? latestRun(thread, runId => this.answerOf(runId, language)) : null,\n openProposals: thread?.openProposals ?? 0\n };\n });\n const body: AgentObjectAgents = {\n subjectType: subject.subjectType,\n subjectId: subject.subjectId,\n subjectDisplayName: subject.displayName,\n subjectTypeName: subject.typeName,\n subjectLink: subject.link,\n role: subject.role,\n agents\n };\n return { status: 200, body };\n }\n\n /**\n * An agent's work on one subject of the whole application, as a board tile shows it: its thread,\n * latest run, open proposals (those the runs left and those the scenario lists in the thread) and\n * whether the caller may run it there now.\n */\n boardWork(agent: AdminAgent, subject: NhAssistantMockDescribedSubject, language: string | null = null): NhAssistantMockBoardWork {\n const thread = this.threads.get(key(agent.id, subject));\n const listed = thread ? (this.context.threadProposals?.(thread.conversationId) ?? []).filter(proposal => proposal.status === 'pending').length : 0;\n return {\n conversationId: thread?.conversationId ?? null,\n latestRun: thread ? latestRun(thread, runId => this.answerOf(runId, language)) : null,\n openProposals: (thread?.openProposals ?? 0) + listed,\n canStart: this.canStart(agent, subject)\n };\n }\n\n /**\n * Whether the agent works for people now and the caller sees its results for the whole application:\n * its view policy, by default its required policy.\n */\n maySeeResults(agent: AdminAgent): boolean {\n return this.isWorking(agent) && this.passesViewPolicy(agent);\n }\n\n /** Whether the agent works for people now and the caller may use it. */\n mayUseNow(agent: AdminAgent): boolean {\n return this.isWorking(agent) && this.mayUse(agent);\n }\n\n /** The agent's name as people read it: a translation key in code, the text of an agent created as data. */\n nameOf(agent: AdminAgent): { displayNameKey: string; descriptionKey: string } {\n return {\n displayNameKey: this.nameKeyOf(agent),\n descriptionKey: agent.source === 'code'\n ? this.scenario.agents.find(item => item.id === agent.id)?.descriptionKey ?? agent.description\n : agent.description\n };\n }\n\n private start(body: unknown, language: string | null): NhAssistantMockResult {\n const request = body as { agentId?: unknown; subjectType?: unknown; subjectId?: unknown; message?: unknown } | undefined;\n if (!request || (request.message !== undefined && request.message !== null && (typeof request.message !== 'string' || request.message.length > maxMessage))) {\n return failure('assistant-message-invalid');\n }\n const read = this.readSubject(request.agentId, request.subjectType, request.subjectId, language);\n if ('failure' in read) {\n return read.failure;\n }\n // A subject the caller may not read gives no role on it.\n if (read.subject === null) {\n return failure('assistant-subject-access-denied');\n }\n const refusal = this.refusal(read.agent, read.subject);\n if (refusal) {\n return failure(refusal);\n }\n\n return this.startNow(read.agent, read.subject);\n }\n\n /**\n * Starts a run by hand after the start checks, as the server's triggers do: the agent's state, the\n * daily limit, then the run with the scenario's outcome. A paused agent answers `waiting`.\n */\n private startNow(agent: AdminAgent, subject: NhAssistantMockDescribedSubject): NhAssistantMockResult {\n const stateRefusal = refusalOfState(agent);\n if (stateRefusal) {\n return failure(stateRefusal);\n }\n\n const runNow: NhAssistantMockRunNow = this.scenario.runNow?.[agent.id] ?? {};\n const threadKey = key(agent.id, subject);\n const existing = this.threads.get(threadKey);\n if (runNow.dailyLimit !== undefined && existing && this.runsByHandToday(existing) >= runNow.dailyLimit) {\n return failure('assistant-trigger-rate-limited');\n }\n\n const outcome = runNow.outcome ?? 'started';\n if (outcome === 'ignored' || outcome === 'deferred') {\n // Nothing started yet: a deferred start names no run or thread until the change is saved.\n return accepted({ triggerId: 'manual', outcome, runId: null, conversationId: null, reasonCode: null });\n }\n\n const thread = existing ?? { conversationId: this.nextId(), agentId: agent.id, subject, runs: [], openProposals: 0 };\n this.threads.set(threadKey, thread);\n if (agent.runState === 'paused' || outcome === 'waiting') {\n // The start waits in the agent's thread and runs when the agent, or its skill, resumes.\n const reasonCode = agent.runState === 'paused' ? 'assistant-agent-paused' : 'assistant-skill-paused';\n return accepted({ triggerId: 'manual', outcome: 'waiting', runId: null, conversationId: thread.conversationId, reasonCode });\n }\n\n const run = this.recordRun(thread, agent, runNow);\n return accepted({ triggerId: 'manual', outcome, runId: run.id, conversationId: thread.conversationId, reasonCode: null });\n }\n\n /** A run by hand that ends at once with the scenario's status, result and proposals. */\n private recordRun(thread: StoredThread, agent: AdminAgent, runNow: NhAssistantMockRunNow): AgentRun {\n const now = this.now();\n const status = runNow.status ?? 'completed';\n const ended = !activeStatuses.includes(status);\n const run: AgentRun = {\n id: this.nextId(),\n conversationId: thread.conversationId,\n triggerId: 'manual',\n status,\n failureClass: status === 'failed' ? 'permanent' : null,\n failureCode: status === 'failed' ? 'assistant-turn-failed' : null,\n initiatorActorId: 'current-user',\n accountableOwnerId: `assistant-agent:${agent.id}`,\n attempt: 1,\n agentVersion: agent.version,\n toolCalls: 0,\n inputTokens: 0,\n outputTokens: 0,\n proposalCount: runNow.proposals ?? 0,\n summary: runNow.result === undefined || runNow.result === null ? null : runNow.result.slice(0, 600),\n shadow: false,\n createdAt: now,\n startedAt: status === 'queued' ? null : now,\n endedAt: ended ? now : null,\n backgroundOperationId: null,\n kind: 'model'\n };\n thread.runs.push(run);\n this.keep(run.id, runNow.result, runNow.results);\n thread.openProposals += runNow.proposals ?? 0;\n this.context.workChanged?.({\n conversationId: thread.conversationId,\n reason: 'run',\n approvalId: null,\n runId: run.id,\n subjectType: thread.subject.subjectType,\n subjectId: thread.subject.subjectId\n }, agent.id);\n return run;\n }\n\n /** The runs by hand of a thread in the last day, which the daily limit counts. */\n private runsByHandToday(thread: StoredThread): number {\n const now = Date.parse(this.now());\n return thread.runs.filter(run => run.triggerId === 'manual' && now - Date.parse(run.createdAt) < dayMs).length;\n }\n\n /**\n * `POST threads/open`: the agent's thread about the subject, created without a run when it is\n * missing. Readers open an existing thread; creating one needs what a start by hand needs, and a\n * refusal answers `409` for what the agent does not work on and `403` otherwise.\n */\n private open(body: unknown, language: string | null): NhAssistantMockResult {\n const request = body as { agentId?: unknown; subjectType?: unknown; subjectId?: unknown } | undefined;\n if (!request || typeof request !== 'object') {\n return failure('assistant-subject-invalid');\n }\n const read = this.readSubject(request.agentId, request.subjectType, request.subjectId, language);\n if ('failure' in read) {\n return read.failure;\n }\n const { agent, subject } = read;\n if (subject === null || !this.mayReadThreadOf(agent, subject)) {\n return failure('assistant-subject-not-found');\n }\n if (agent.shadowOf && !this.context.administers()) {\n return failure('assistant-agent-not-found');\n }\n\n const threadKey = key(agent.id, subject);\n let thread = this.threads.get(threadKey);\n if (!thread) {\n const refusal = this.refusal(agent, subject);\n if (refusal) {\n return failure(refusal === 'assistant-agent-does-not-work-on' ? refusal : 'assistant-subject-access-denied');\n }\n thread = { conversationId: this.nextId(), agentId: agent.id, subject, runs: [], openProposals: 0 };\n this.threads.set(threadKey, thread);\n }\n\n const lookup: AgentThreadLookup = { thread: toThread(thread), canStart: this.canStart(agent, subject), role: subject.role };\n return { status: 200, body: lookup };\n }\n\n private lookup(query: URLSearchParams, language: string | null): NhAssistantMockResult {\n const read = this.readSubject(query.get('agentId'), query.get('subjectType') ?? '', query.get('subjectId') ?? '', language);\n if ('failure' in read) {\n return read.failure;\n }\n const { agent, subject } = read;\n if (subject === null || !this.mayReadThreadOf(agent, subject)) {\n return failure('assistant-subject-not-found');\n }\n if (agent.shadowOf && !this.context.administers()) {\n return failure('assistant-agent-not-found');\n }\n\n const thread = this.threads.get(key(agent.id, subject));\n const body: AgentThreadLookup = {\n thread: thread ? toThread(thread) : null,\n canStart: this.canStart(agent, subject),\n role: subject.role\n };\n return { status: 200, body };\n }\n\n /**\n * `POST runs/{id}/cancel`: cancels an open run and withdraws its open proposals; needs the\n * participant role on the thread. An ended run stays as it is.\n */\n private cancel(runId: string, language: string | null): NhAssistantMockResult {\n const found = this.findRun(runId);\n if (!found) {\n return failure('assistant-run-not-found');\n }\n const role = this.roleOn(found.thread, language);\n if (role === null) {\n return failure('assistant-conversation-not-found');\n }\n if (role === 'reader') {\n return failure('assistant-subject-access-denied');\n }\n if (activeStatuses.includes(found.run.status)) {\n found.run.status = 'cancelled';\n found.run.endedAt = this.now();\n found.thread.openProposals = Math.max(0, found.thread.openProposals - found.run.proposalCount);\n }\n return { status: 202 };\n }\n\n /**\n * `POST runs/{id}/retry`: resumes a failed or cancelled run (`queued`), or restarts the agent in the\n * same thread like a start by hand; needs the approver role on the thread. The mock's resumed\n * attempt ends at once as the scenario's `runNow` says.\n */\n private retry(runId: string, body: unknown, language: string | null): NhAssistantMockResult {\n const mode = (body as { mode?: unknown } | undefined)?.mode ?? 'resume';\n if (mode !== 'resume' && mode !== 'restart') {\n return failure('assistant-run-not-retryable');\n }\n const found = this.findRun(runId);\n if (!found) {\n return failure('assistant-run-not-found');\n }\n const role = this.roleOn(found.thread, language);\n if (role === null) {\n return failure('assistant-conversation-not-found');\n }\n if (role !== 'approver') {\n return failure('assistant-subject-access-denied');\n }\n if (!retryableStatuses.includes(found.run.status)) {\n return failure('assistant-run-not-retryable');\n }\n\n const agent = this.context.agents().find(item => item.id === found.thread.agentId);\n if (!agent) {\n return failure('assistant-agent-not-found');\n }\n if (mode === 'restart') {\n return this.startNow(agent, found.thread.subject);\n }\n\n const runNow = this.scenario.runNow?.[agent.id] ?? {};\n const status = runNow.status ?? 'completed';\n const now = this.now();\n found.run.status = status;\n found.run.attempt += 1;\n found.run.failureClass = status === 'failed' ? 'permanent' : null;\n found.run.failureCode = status === 'failed' ? 'assistant-turn-failed' : null;\n found.run.startedAt = now;\n found.run.endedAt = activeStatuses.includes(status) ? null : now;\n return accepted({ triggerId: found.run.triggerId, outcome: 'queued', runId: found.run.id, conversationId: found.run.conversationId, reasonCode: null });\n }\n\n /**\n * The request's agent and subject as the server reads them: an unknown agent is not found, a\n * malformed subject reference invalid and an unknown type unknown. `subject` is `null` for a subject\n * the caller may not read.\n */\n private readSubject(agentId: unknown, subjectType: unknown, subjectId: unknown, language: string | null): SubjectRead {\n const agent = typeof agentId === 'string' ? this.context.agents().find(item => item.id === agentId) : undefined;\n if (!agent) {\n return { failure: failure('assistant-agent-not-found') };\n }\n const type = typeof subjectType === 'string' ? subjectType : '';\n const id = typeof subjectId === 'string' ? subjectId : '';\n if (!validSubject(type, id)) {\n return { failure: failure('assistant-subject-invalid') };\n }\n const subject = this.subjects.describe(type, id, language, this.context.administers());\n if (subject === undefined) {\n return { failure: failure('assistant-subject-type-unknown') };\n }\n return { agent, subject };\n }\n\n /**\n * Why the caller may not run the agent on the subject, in the server's order: the role, the agent,\n * what it works on, then the run policy and shadow. The agent's state is checked when the run\n * starts.\n */\n private refusal(agent: AdminAgent, subject: NhAssistantMockDescribedSubject): string | null {\n const system = subject.subjectType === mockSystemSubjectType;\n if (!system && subject.role === 'reader') {\n return 'assistant-subject-access-denied';\n }\n if (!this.mayUse(agent)) {\n return 'assistant-agent-forbidden';\n }\n if (!worksOn(agent, subject)) {\n return 'assistant-agent-does-not-work-on';\n }\n if (system && !(agent.runPolicy ? this.passes(agent.runPolicy) : this.context.administers())) {\n return 'assistant-agent-forbidden';\n }\n if (agent.shadow?.shadow && !this.context.administers()) {\n return 'assistant-agent-forbidden';\n }\n return null;\n }\n\n /** Whether the caller may start the agent now, as `canStart` says: it works and nothing refuses it. */\n private canStart(agent: AdminAgent, subject: NhAssistantMockDescribedSubject): boolean {\n return this.isWorking(agent) && this.refusal(agent, subject) === null;\n }\n\n /** The caller's live role on a thread, or `null` when the caller may not see it. */\n private roleOn(thread: StoredThread, language: string | null): 'reader' | 'participant' | 'approver' | null {\n if (!this.mayView(thread, language)) {\n return null;\n }\n const subject = this.subjects.describe(thread.subject.subjectType, thread.subject.subjectId, language, this.context.administers());\n return subject?.role ?? null;\n }\n\n /** The agent's thread about the whole application is only for people who pass its view policy. */\n private mayReadThreadOf(agent: AdminAgent, subject: NhAssistantMockDescribedSubject): boolean {\n return subject.scope === 'object' || this.passesViewPolicy(agent);\n }\n\n /** A run history's page of the runs the caller may see, or with `everything` every run, newest first. */\n private history(filter: RunFilter, language: string | null, everything: boolean): AgentRunHistory {\n const matching = [...this.threads.values()]\n .filter(thread => (filter.agentId === null || thread.agentId === filter.agentId)\n && (filter.subjectType === null || thread.subject.subjectType === filter.subjectType)\n && (filter.subjectId === null || thread.subject.subjectId === filter.subjectId)\n && (everything || this.mayView(thread, language)))\n .flatMap(thread => thread.runs\n .filter(run => (filter.status === null || run.status === filter.status)\n && (filter.from === null || Date.parse(run.createdAt) >= filter.from)\n && (filter.to === null || Date.parse(run.createdAt) < filter.to))\n .map(run => ({ thread, run })))\n .sort((left, right) => Date.parse(right.run.createdAt) - Date.parse(left.run.createdAt) || right.run.id.localeCompare(left.run.id));\n const start = (filter.page - 1) * filter.itemsPerPage;\n return {\n items: matching.slice(start, start + filter.itemsPerPage).map(item => this.toHistoryItem(item.thread, item.run, language)),\n total: matching.length,\n limited: false\n };\n }\n\n /**\n * Whether the caller may see the runs of the thread: shadow work for administrators only, an object\n * the caller reads, the whole application by the agent's view policy, by default its required\n * policy.\n */\n private mayView(thread: StoredThread, language: string | null): boolean {\n if (thread.shadow && !this.context.administers()) {\n return false;\n }\n const subject = this.subjects.describe(thread.subject.subjectType, thread.subject.subjectId, language, this.context.administers());\n if (!subject) {\n return false;\n }\n if (subject.scope === 'object') {\n return true;\n }\n const agent = this.context.agents().find(item => item.id === thread.agentId);\n return agent !== undefined && this.passesViewPolicy(agent);\n }\n\n private threadOf(conversationId: string): StoredThread | undefined {\n return [...this.threads.values()].find(item => item.conversationId === conversationId);\n }\n\n private findRun(runId: string): { thread: StoredThread; run: AgentRun } | null {\n for (const thread of this.threads.values()) {\n const run = thread.runs.find(item => item.id === runId);\n if (run) {\n return { thread, run };\n }\n }\n return null;\n }\n\n private toHistoryItem(thread: StoredThread, run: AgentRun, language: string | null): AgentRunHistoryItem {\n const agent = this.context.agents().find(item => item.id === thread.agentId);\n const subject = this.subjects.describe(thread.subject.subjectType, thread.subject.subjectId, language, this.context.administers())\n ?? thread.subject;\n const answer = this.answerOf(run.id, language);\n const preview = answer ?? run.summary;\n return {\n id: run.id,\n conversationId: run.conversationId,\n agentId: thread.agentId,\n agentDisplayNameKey: agent ? this.nameKeyOf(agent) : null,\n subjectType: thread.subject.subjectType,\n subjectId: thread.subject.subjectId,\n subjectDisplayName: subject.displayName,\n subjectTypeName: subject.typeName,\n subjectLink: subject.link,\n triggerId: run.triggerId,\n status: run.status,\n failureClass: run.failureClass,\n failureCode: run.failureCode,\n kind: run.kind ?? 'model',\n skill: run.skill ?? null,\n initiatorActorId: run.initiatorActorId,\n toolCalls: run.toolCalls,\n modelCalls: 0,\n inputTokens: run.inputTokens,\n outputTokens: run.outputTokens,\n proposalCount: run.proposalCount,\n result: preview === null ? null : preview.slice(0, resultPreview),\n resultTruncated: preview !== null && (preview.length > resultPreview || this.truncated.has(run.id)),\n shadow: run.shadow,\n createdAt: run.createdAt,\n startedAt: run.startedAt,\n endedAt: run.endedAt,\n mcpConnectionSkips: this.mcpSkips.get(run.id) ?? []\n };\n }\n\n /** Stores a run of the scenario in its agent's thread on its subject. */\n private seed(seeded: NhAssistantMockRun): void {\n const described = this.subjects.describe(seeded.subjectType, seeded.subjectId, null, true);\n const system = seeded.subjectType === mockSystemSubjectType;\n const subject: NhAssistantMockDescribedSubject = {\n subjectType: seeded.subjectType,\n subjectId: seeded.subjectId,\n displayName: seeded.subjectDisplayName ?? described?.displayName ?? seeded.subjectId,\n typeName: described?.typeName ?? null,\n link: described?.link ?? null,\n role: described?.role ?? 'reader',\n scope: described?.scope ?? (system ? 'global' : 'object')\n };\n const shadow = seeded.shadow === true;\n const threadKey = key(seeded.agentId, subject) + (shadow ? '|shadow' : '');\n const thread = this.threads.get(threadKey)\n ?? { conversationId: this.nextId(), agentId: seeded.agentId, subject, runs: [], openProposals: 0, shadow };\n this.threads.set(threadKey, thread);\n const createdAt = seeded.createdAt ?? this.now();\n const status = seeded.status ?? 'completed';\n const ended = !activeStatuses.includes(status);\n const endedAt = new Date(Date.parse(createdAt) + (seeded.durationSeconds ?? 30) * 1000).toISOString();\n const tokens = seeded.tokens ?? 0;\n const run: AgentRun = {\n id: seeded.id ?? this.nextId(),\n conversationId: thread.conversationId,\n triggerId: seeded.triggerId ?? 'manual',\n status,\n failureClass: status === 'failed' ? 'internal' : null,\n failureCode: status === 'failed' ? seeded.failureCode ?? 'assistant-turn-failed' : null,\n initiatorActorId: null,\n accountableOwnerId: `assistant-agent:${seeded.agentId}`,\n attempt: 1,\n agentVersion: 1,\n toolCalls: seeded.toolCalls ?? 0,\n inputTokens: Math.ceil(tokens / 2),\n outputTokens: Math.floor(tokens / 2),\n proposalCount: seeded.proposalCount ?? 0,\n summary: seeded.result ? seeded.result.slice(0, 600) : null,\n shadow,\n createdAt,\n startedAt: status === 'queued' ? null : createdAt,\n endedAt: ended ? endedAt : null,\n backgroundOperationId: null,\n kind: 'model'\n };\n thread.runs.push(run);\n thread.runs.sort((left, right) => Date.parse(left.createdAt) - Date.parse(right.createdAt));\n this.keep(run.id, seeded.result, seeded.results);\n if (seeded.mcpConnectionSkips?.length) {\n this.mcpSkips.set(run.id, seeded.mcpConnectionSkips.map(skip => ({ ...skip })));\n }\n }\n\n /**\n * Keeps a run's answer as the server bounds it: its first 20,000 characters, marked when cut, and its\n * answer per culture when its rules wrote one.\n */\n private keep(runId: string, answer: string | null | undefined, results?: Readonly<Record<string, string>>): void {\n this.results.set(runId, answer === undefined || answer === null ? null : answer.slice(0, maxResult));\n if (answer && answer.length > maxResult) {\n this.truncated.add(runId);\n }\n if (results && Object.keys(results).length > 0) {\n this.localizedResults.set(runId, Object.fromEntries(Object.entries(results).map(([culture, text]) => [culture, text.slice(0, maxResult)])));\n }\n }\n\n /**\n * The run's answer for a reader of `language`, as the server picks it: the answer per culture of the\n * exact culture or another of the same language when the rules wrote one, otherwise the answer.\n */\n private answerOf(runId: string, language: string | null): string | null {\n const localized = this.localizedResults.get(runId);\n const picked = localized ? mockPickText({ ...localized }, '', language) : null;\n return picked ?? this.results.get(runId) ?? null;\n }\n\n /** Neither stopped nor disabled in code; a paused agent, and one that is off, still works for people. */\n private isWorking(agent: AdminAgent): boolean {\n return agent.runState === 'active' || agent.runState === 'paused' || agent.runState === 'off';\n }\n\n private mayUse(agent: AdminAgent): boolean {\n return agent.requiredPolicy === null || agent.requiredPolicy === undefined || this.passes(agent.requiredPolicy);\n }\n\n /** The agent's view policy, by default its required policy, for its work on the whole application. */\n private passesViewPolicy(agent: AdminAgent): boolean {\n const policy = agent.viewPolicy ?? agent.requiredPolicy ?? null;\n return policy === null || this.passes(policy);\n }\n\n private passes(policy: string): boolean {\n return this.scenario.callerPolicies?.includes(policy) ?? true;\n }\n\n /** Agents in code keep their translation keys, agents created as data their text. */\n private nameKeyOf(agent: AdminAgent): string {\n return agent.source === 'code'\n ? this.scenario.agents.find(item => item.id === agent.id)?.displayNameKey ?? agent.displayName\n : agent.displayName;\n }\n\n private nextId(): string {\n this.sequence++;\n return `00000000-0000-4000-9000-${this.sequence.toString(16).padStart(12, '0')}`;\n }\n}\n\n/** An agent's work on one subject of the whole application for a board tile. */\nexport interface NhAssistantMockBoardWork {\n conversationId: string | null;\n latestRun: AgentLatestRun | null;\n openProposals: number;\n canStart: boolean;\n}\n\n/** The receipt of a start the server accepted. */\nfunction accepted(receipt: AgentTriggerReceipt): NhAssistantMockResult {\n return { status: 202, body: receipt };\n}\n\n/** Why the agent's state refuses a start: stopped, or disabled in the application's code. */\nfunction refusalOfState(agent: AdminAgent): string | null {\n switch (agent.runState) {\n case 'stopped':\n return 'assistant-agent-stopped';\n case 'configured-off':\n return 'assistant-agent-configured-off';\n default:\n return null;\n }\n}\n\n/** One thread per agent and subject, as on the server. */\nfunction key(agentId: string, subject: NhAssistantMockDescribedSubject): string {\n return `${agentId}|${subject.subjectType}|${subject.subjectId}`;\n}\n\nfunction validSubject(type: string, id: string): boolean {\n return dashCase.test(type) && type.length <= 100 && id.trim().length > 0 && id.length <= maxSubjectId && id.trim() === id;\n}\n\n/** The type the agent works on, and for the whole application its scope: app-wide or per division. */\nfunction worksOn(agent: AdminAgent, subject: NhAssistantMockDescribedSubject): boolean {\n if (!mockWorksOnCovers(agent, subject.subjectType)) {\n return false;\n }\n if (subject.scope === 'object') {\n return true;\n }\n return agent.perDivision === true ? subject.scope === 'division' : subject.scope === 'global';\n}\n\nfunction latestRun(thread: StoredThread, answerOf: (runId: string) => string | null): AgentLatestRun | null {\n const run = thread.runs.at(-1);\n if (!run) {\n return null;\n }\n // The stored answer first, in the reader's language as the server reads it; without one, the\n // summary the run ended with.\n const result = answerOf(run.id) ?? run.summary;\n return {\n runId: run.id,\n conversationId: run.conversationId,\n triggerId: run.triggerId,\n status: run.status,\n failureCode: run.failureCode,\n at: run.endedAt ?? run.startedAt ?? run.createdAt,\n result: result === null ? null : result.slice(0, resultPreview),\n resultTruncated: result !== null && result.length > resultPreview,\n shadow: run.shadow\n };\n}\n\nfunction toThread(thread: StoredThread): AgentThread {\n const active = thread.runs.find(run => activeStatuses.includes(run.status)) ?? null;\n return {\n conversationId: thread.conversationId,\n agentId: thread.agentId,\n subjectType: thread.subject.subjectType,\n subjectId: thread.subject.subjectId,\n subjectDisplayName: thread.subject.displayName,\n accountability: 'agent',\n accountableOwnerId: `assistant-agent:${thread.agentId}`,\n role: thread.subject.role,\n activeRun: active,\n waitingInputs: 0,\n shadow: false,\n subjectTypeName: thread.subject.typeName,\n subjectLink: thread.subject.link\n };\n}\n\n/**\n * Reads a run history's filter and page as the server does: the filter, or the refused parts as field\n * errors (`page`, `itemsPerPage`, `agentId`, `subjectType`, `subjectId`, `status`, `from`, `to`).\n * People's history takes an agent; the administration's runs view names its agent in the path.\n */\nfunction readFilter(query: URLSearchParams, withAgent: boolean): { filter: RunFilter } | { errors: Record<string, string[]> } {\n const errors: Record<string, string[]> = {};\n const page = query.has('page') ? Number(query.get('page')) : 1;\n if (!Number.isInteger(page) || page < 1) {\n errors['page'] = ['invalid'];\n }\n const itemsPerPage = query.has('itemsPerPage') ? Number(query.get('itemsPerPage')) : 20;\n if (!Number.isInteger(itemsPerPage) || itemsPerPage < 1 || itemsPerPage > maxItemsPerPage) {\n errors['itemsPerPage'] = ['invalid'];\n }\n const agentId = withAgent ? query.get('agentId') : null;\n if (agentId !== null && (agentId.trim().length === 0 || agentId.length > maxAgentId)) {\n errors['agentId'] = ['invalid'];\n }\n const subjectType = query.get('subjectType');\n if (subjectType !== null && (!dashCase.test(subjectType) || subjectType.length > 100)) {\n errors['subjectType'] = ['invalid'];\n }\n const subjectId = query.get('subjectId');\n if (subjectId !== null) {\n if (subjectType === null) {\n errors['subjectType'] = ['required'];\n }\n if (subjectId.trim().length === 0 || subjectId.length > maxSubjectId || subjectId.trim() !== subjectId) {\n errors['subjectId'] = ['invalid'];\n }\n }\n const status = query.get('status');\n if (status !== null && !runStatuses.includes(status as AgentRunStatus)) {\n errors['status'] = ['invalid'];\n }\n const from = query.has('from') ? Date.parse(query.get('from')!) : null;\n const to = query.has('to') ? Date.parse(query.get('to')!) : null;\n if (from !== null && Number.isNaN(from)) {\n errors['from'] = ['invalid'];\n }\n if ((to !== null && Number.isNaN(to)) || (from !== null && to !== null && !Number.isNaN(from) && to <= from)) {\n errors['to'] = ['invalid'];\n }\n\n if (Object.keys(errors).length > 0) {\n return { errors };\n }\n return { filter: { agentId, subjectType, subjectId, status, from, to, page, itemsPerPage } };\n}\n","import {\n AdminAgent,\n AdminAgentGroups,\n AgentBoard,\n AgentBoardAgent,\n AgentBoardList,\n AgentBoardVisit,\n AgentGroup,\n AgentSubjectType\n} from '@newheap/platform-ai-chat';\nimport { NhAssistantMockAgentGroup, NhAssistantMockScenario } from './nh-assistant-mock.models';\nimport { NhAssistantMockResult, mockFailure as failure, mockSnapshot } from './nh-assistant-mock-admin-shared';\nimport { NhAssistantMockAgentRuns } from './nh-assistant-mock-agent-runs';\nimport { NhAssistantMockDescribedSubject, NhAssistantMockSubjects, mockPickText } from './nh-assistant-mock-subjects';\nimport { mockSystemSubjectType } from './nh-assistant-mock-works-on';\n\n/** What the boards read of the mock's agents and caller. */\nexport interface NhAssistantMockBoardContext {\n /** Every agent of the administration. */\n agents(): AdminAgent[];\n /** Whether the caller passes the administration policy. */\n administers(): boolean;\n}\n\nconst dashCase = /^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/;\nconst language = /^[A-Za-z]{2,8}(-[A-Za-z0-9]{1,8})*$/;\nconst maxGroupId = 64;\nconst maxGroups = 100;\nconst maxName = 100;\nconst maxDescription = 300;\nconst guid = /^[0-9a-f]{8}-?[0-9a-f]{4}-?[0-9a-f]{4}-?[0-9a-f]{4}-?[0-9a-f]{12}$/i;\n\n/**\n * Groups and boards of the mock API (K15, K16), as the server serves them: the scenario's\n * `agentGroups` are the groups in code with their names per language, checked as the server checks\n * the registration at startup; administrators put agents in groups and out of them with\n * `PUT admin/agents/{id}/groups`, which wins over the scenario's code memberships; `GET boards`,\n * `GET boards/{group}` and `POST boards/{group}/visit` show people the agents they may see (an agent\n * that works on the whole application by its view policy, by default its required policy, another by\n * its required policy), with their latest result and what is new since the visit of the board in its\n * scope. Visits live as long as the mock.\n */\nexport class NhAssistantMockBoards {\n private readonly groups: readonly NhAssistantMockAgentGroup[];\n /** The administrators' choices per agent: group id to in or out. */\n private readonly choices = new Map<string, Map<string, boolean>>();\n /** When the caller last visited a board, by `group|scope`. */\n private readonly visits = new Map<string, string>();\n\n constructor(\n scenario: NhAssistantMockScenario,\n private readonly subjects: NhAssistantMockSubjects,\n private readonly agentRuns: NhAssistantMockAgentRuns,\n private readonly context: NhAssistantMockBoardContext,\n private readonly now: () => string\n ) {\n this.groups = [...(scenario.agentGroups ?? [])].sort((left, right) => left.id.localeCompare(right.id));\n validate(this.groups);\n // An agent created as data that the scenario lists in a group was put there by an administrator.\n for (const group of this.groups) {\n for (const agentId of group.agentIds ?? []) {\n if (this.context.agents().find(agent => agent.id === agentId)?.source === 'admin') {\n const choices = this.choices.get(agentId) ?? new Map<string, boolean>();\n choices.set(group.id, true);\n this.choices.set(agentId, choices);\n }\n }\n }\n }\n\n /** The run catalog's groups in the request's language, by id. */\n catalog(requested: string | null): AgentGroup[] {\n return this.groups.map(group => ({\n id: group.id,\n name: mockPickText(group.names, group.fallbackLanguage ?? 'en', requested) ?? group.id,\n description: mockPickText(group.descriptions, group.fallbackLanguage ?? 'en', requested)\n }));\n }\n\n /** The groups an agent is in now and those it joins in code. */\n membership(agentId: string): AdminAgentGroups {\n const codeGroups = this.codeGroupsOf(agentId);\n const groups = new Set(codeGroups);\n for (const [groupId, member] of this.choices.get(agentId) ?? []) {\n if (member) {\n groups.add(groupId);\n } else {\n groups.delete(groupId);\n }\n }\n return { agentId, groups: [...groups].sort(), codeGroups };\n }\n\n /**\n * A copy of the administrators' group choices; the returned function puts it back, for an import\n * of an agent package that fails as a whole and for its preview.\n */\n snapshot(): () => void {\n return mockSnapshot(this.choices);\n }\n\n /** Forgets the choices about an agent that was deleted. */\n forget(agentId: string): void {\n this.choices.delete(agentId);\n }\n\n /** `PUT admin/agents/{id}/groups`, with the server's validation. */\n handleAdminGroups(method: string, agentId: string, body: unknown): NhAssistantMockResult {\n if (method !== 'PUT') {\n return { status: 405 };\n }\n if (!this.context.administers()) {\n return failure('assistant-forbidden');\n }\n const request = body as { groups?: unknown } | undefined;\n if (!request || typeof request !== 'object') {\n return failure('assistant-validation');\n }\n if (!Array.isArray(request.groups)) {\n return failure('assistant-validation', { groups: ['required'] });\n }\n const wanted = request.groups as unknown[];\n if (wanted.length > maxGroups) {\n return failure('assistant-validation', { groups: ['too-long'] });\n }\n if (!wanted.every(groupId => typeof groupId === 'string' && this.groups.some(group => group.id === groupId))) {\n return failure('assistant-validation', { groups: ['not-found'] });\n }\n const agent = this.context.agents().find(item => item.id === agentId);\n if (!agent) {\n return failure('assistant-agent-not-found');\n }\n if (wanted.length > 0 && agent.shadowOf) {\n return failure('assistant-shadow-variant');\n }\n\n // Only a choice that differs from code is kept; one that equals code lets code decide again.\n const codeGroups = this.codeGroupsOf(agentId);\n const choices = new Map<string, boolean>();\n for (const group of this.groups) {\n const member = wanted.includes(group.id);\n if (member !== codeGroups.includes(group.id)) {\n choices.set(group.id, member);\n }\n }\n this.choices.set(agentId, choices);\n return { status: 200, body: this.membership(agentId) };\n }\n\n /** `GET boards`, `GET boards/{group}` and `POST boards/{group}/visit`; `null` for other paths. */\n handle(method: string, segments: string[], query: URLSearchParams, requested: string | null): NhAssistantMockResult | null {\n if (segments[0] !== 'boards' || segments.length > 3 || (segments.length === 3 && segments[2] !== 'visit')) {\n return null;\n }\n if (segments.length === 1) {\n if (method !== 'GET') {\n return { status: 405 };\n }\n const items = this.groups\n .map(group => ({ group, count: this.visibleAgents(group.id, null, requested).length }))\n .filter(item => item.count > 0)\n .map(item => {\n const named = this.catalog(requested).find(group => group.id === item.group.id)!;\n return { id: named.id, name: named.name, description: named.description, agentCount: item.count };\n })\n .sort((left, right) => left.name.localeCompare(right.name) || left.id.localeCompare(right.id));\n const body: AgentBoardList = { items };\n return { status: 200, body };\n }\n\n const visit = segments.length === 3;\n if (method !== (visit ? 'POST' : 'GET')) {\n return { status: 405 };\n }\n const groupId = segments[1];\n const divisionId = query.get('divisionId');\n if (divisionId !== null && divisionId !== '' && !guid.test(divisionId)) {\n return failure('assistant-board-scope-invalid');\n }\n const division = divisionId ? this.division(divisionId, requested) : null;\n if (!this.groups.some(group => group.id === groupId) || division === undefined) {\n return failure('assistant-board-not-found');\n }\n const agents = this.visibleAgents(groupId, division, requested);\n if (agents.length === 0) {\n return failure('assistant-board-not-found');\n }\n\n const scopeKey = division ? `division:${guidN(divisionId!)}` : 'global';\n const visitKey = `${groupId}|${scopeKey}`;\n if (visit) {\n const visitedAt = this.now();\n this.visits.set(visitKey, visitedAt);\n const body: AgentBoardVisit = { groupId, scopeKey, visitedAt };\n return { status: 200, body };\n }\n\n const lastVisitedAt = this.visits.get(visitKey) ?? null;\n const named = this.catalog(requested).find(group => group.id === groupId)!;\n const types = this.subjects.catalog(requested);\n const body: AgentBoard = {\n id: groupId,\n name: named.name,\n description: named.description,\n scopeKey,\n divisionId: division ? divisionId!.toLowerCase() : null,\n lastVisitedAt,\n agents: agents.map(agent => this.tile(agent, division, types, lastVisitedAt, requested))\n };\n return { status: 200, body };\n }\n\n /** The tile of one agent on a board. */\n private tile(\n agent: AdminAgent,\n division: NhAssistantMockDescribedSubject | null,\n types: readonly AgentSubjectType[],\n lastVisitedAt: string | null,\n requested: string | null\n ): AgentBoardAgent {\n const subject = this.subjectOf(agent, division, requested);\n const work = subject ? this.agentRuns.boardWork(agent, subject, requested) : null;\n const ended = work?.latestRun && work.latestRun.status !== 'queued' && work.latestRun.status !== 'running'\n ? Date.parse(work.latestRun.at)\n : null;\n const visited = lastVisitedAt === null ? null : Date.parse(lastVisitedAt);\n const isNew = visited === null\n ? ended !== null || (work?.openProposals ?? 0) > 0\n : ended !== null && ended > visited;\n return {\n agentId: agent.id,\n ...this.agentRuns.nameOf(agent),\n worksOn: {\n allObjects: agent.worksOnAllSubjects ?? true,\n application: agent.worksOnApplication === true,\n perDivision: agent.perDivision === true,\n subjectTypes: [...(agent.worksOnSubjectTypes ?? [])].sort().map(id => {\n const type = types.find(item => item.id === id);\n return { id, name: type?.name ?? id, pluralName: type?.pluralName ?? null };\n })\n },\n subjectType: subject?.subjectType ?? null,\n subjectId: subject?.subjectId ?? null,\n subjectDisplayName: subject?.displayName ?? null,\n canStart: work?.canStart ?? false,\n conversationId: work?.conversationId ?? null,\n latestRun: work?.latestRun ?? null,\n openProposals: work?.openProposals ?? 0,\n isNew\n };\n }\n\n /**\n * The group's agents the caller sees on its board in the scope, by id: working live agents, by their\n * view policy where they work on the whole application in the scope, otherwise by their required\n * policy.\n */\n private visibleAgents(groupId: string, division: NhAssistantMockDescribedSubject | null, requested: string | null): AdminAgent[] {\n return this.context.agents()\n .filter(agent => !agent.shadowOf && this.membership(agent.id).groups.includes(groupId))\n .filter(agent => this.subjectOf(agent, division, requested)\n ? this.agentRuns.maySeeResults(agent)\n : this.agentRuns.mayUseNow(agent))\n .sort((left, right) => left.id.localeCompare(right.id));\n }\n\n /** The whole application an agent works on in the board's scope, as the server decides it. */\n private subjectOf(agent: AdminAgent, division: NhAssistantMockDescribedSubject | null, requested: string | null): NhAssistantMockDescribedSubject | null {\n if (agent.worksOnApplication !== true) {\n return null;\n }\n if (agent.perDivision !== true) {\n return this.subjects.describe(mockSystemSubjectType, 'global', requested, this.context.administers()) ?? null;\n }\n return division;\n }\n\n /** A listed division the caller works in; `undefined` for one the board may not show. */\n private division(divisionId: string, requested: string | null): NhAssistantMockDescribedSubject | undefined {\n return this.subjects.describe(mockSystemSubjectType, `division-${guidN(divisionId)}`, requested, this.context.administers()) ?? undefined;\n }\n\n /** The groups an agent in code joins in code; an agent created as data joins none there. */\n private codeGroupsOf(agentId: string): string[] {\n if (this.context.agents().find(agent => agent.id === agentId)?.source !== 'code') {\n return [];\n }\n return this.groups.filter(group => group.agentIds?.includes(agentId)).map(group => group.id);\n }\n}\n\nfunction guidN(id: string): string {\n return id.replace(/-/g, '').toLowerCase();\n}\n\n/** Fails as the server fails at startup for groups it would not register. */\nfunction validate(groups: readonly NhAssistantMockAgentGroup[]): void {\n if (groups.length > maxGroups) {\n throw new Error(`The mock scenario registers more than ${maxGroups} agent groups.`);\n }\n const seen = new Set<string>();\n for (const group of groups) {\n if (!dashCase.test(group.id) || group.id.length > maxGroupId) {\n throw new Error(`The mock agent group '${group.id}' is not a dash-case id of at most ${maxGroupId} characters.`);\n }\n if (seen.has(group.id)) {\n throw new Error(`The mock agent group '${group.id}' is registered twice.`);\n }\n seen.add(group.id);\n const fallback = group.fallbackLanguage ?? 'en';\n checkTexts(group.id, 'name', group.names, fallback, maxName);\n if (group.descriptions) {\n checkTexts(group.id, 'description', group.descriptions, fallback, maxDescription);\n }\n }\n}\n\nfunction checkTexts(groupId: string, kind: string, texts: Record<string, string> | undefined, fallback: string, max: number): void {\n const entries = Object.entries(texts ?? {});\n if (entries.length === 0 || !entries.some(([key]) => key.toLowerCase() === fallback.toLowerCase())) {\n throw new Error(`The mock agent group '${groupId}' has no ${kind} in its fallback language '${fallback}'.`);\n }\n for (const [key, text] of entries) {\n if (!language.test(key) || text.trim().length === 0 || text.trim().length > max) {\n throw new Error(`The ${kind} of mock agent group '${groupId}' in '${key}' must be 1 to ${max} characters.`);\n }\n }\n}\n","import { AdminAgent, AgentMetadata, AgentMetadataEntry, AgentMetadataSource } from '@newheap/platform-ai-chat';\nimport { NhAssistantMockAgentMetadataEntry, NhAssistantMockScenario } from './nh-assistant-mock.models';\nimport { NhAssistantMockResult, mockFailure as failure, mockSnapshot } from './nh-assistant-mock-admin-shared';\n\n/** What the metadata reads of the mock's agents and caller. */\nexport interface NhAssistantMockAgentMetadataContext {\n agent(agentId: string): AdminAgent | undefined;\n /** Whether the caller passes the administration policy. */\n administers(): boolean;\n /** Makes the next version of an agent created here, as a change of its metadata does. */\n nextVersion(agentId: string): AdminAgent;\n}\n\n/** A stored value: of an agent created here, or an override of an agent in code. */\ninterface StoredValue {\n value: Record<string, unknown>;\n version: number;\n changedAt: string;\n changedBy: string;\n}\n\nconst defaultMaxBytes = 4_096;\nconst dashCase = /^[a-z0-9]+(?:-[a-z0-9]+)*$/;\n\n/**\n * Agent metadata of the mock API (MD1 to MD3), as the server serves it: `admin.agentMetadata` of the\n * scenario are the entries registered in code, and `metadata` of each scenario agent its values, in\n * code for an agent in code and stored at the first version for an agent created as data.\n * `GET admin/agents/{id}/metadata`, `PUT` and `DELETE admin/agents/{id}/metadata/{name}` answer with\n * the server's checks: an entry of an agent created here makes the agent's next version, an editable\n * entry of an agent in code is an override with a version of its own, and a read-only one is refused.\n * Values of `POST` and `PUT admin/agents` are not taken: the agent editor saves each entry through its\n * slot. Values live as long as the mock.\n */\nexport class NhAssistantMockAgentMetadata {\n private readonly entries: readonly NhAssistantMockAgentMetadataEntry[];\n /** The values in code, by agent and entry. */\n private readonly code = new Map<string, Map<string, Record<string, unknown>>>();\n /** The stored values, by agent and entry. */\n private readonly stored = new Map<string, Map<string, StoredValue>>();\n\n constructor(\n scenario: NhAssistantMockScenario,\n private readonly context: NhAssistantMockAgentMetadataContext,\n private readonly now: () => string\n ) {\n this.entries = [...(scenario.admin?.agentMetadata ?? [])].sort((left, right) => left.name.localeCompare(right.name));\n for (const entry of this.entries) {\n if (!dashCase.test(entry.name) || entry.name.length > 64 || entry.name.startsWith('nh-')) {\n throw new Error(`The mock's agent metadata entry '${entry.name}' is not a valid name.`);\n }\n }\n for (const agent of scenario.admin?.agents ?? []) {\n for (const [name, value] of Object.entries(agent.metadata ?? {})) {\n const entry = this.entries.find(item => item.name === name);\n // Startup refuses a value that a save would refuse.\n const problems = entry ? this.problemsOf(entry, value) : { '': ['not-found'] };\n if (!entry || Object.keys(problems).length > 0) {\n throw new Error(`The mock agent '${agent.id}' sets metadata '${name}' that the entries refuse.`);\n }\n if (agent.source === 'code') {\n this.valuesOf(this.code, agent.id).set(name, structuredClone(value as Record<string, unknown>));\n } else {\n this.valuesOf(this.stored, agent.id).set(name, {\n value: structuredClone(value as Record<string, unknown>),\n version: 1,\n changedAt: this.now(),\n changedBy: 'current-user'\n });\n }\n }\n }\n }\n\n /** The run catalog's `agentMetadata`. */\n catalog(): AgentMetadataEntry[] {\n return this.entries.map(entry => ({\n name: entry.name,\n editable: entry.editable === true,\n maxBytes: entry.maxBytes ?? defaultMaxBytes,\n indexed: entry.indexBy !== undefined || entry.indexByEach !== undefined,\n indexedByEach: entry.indexByEach !== undefined\n }));\n }\n\n /**\n * A copy of the stored values; the returned function puts it back, for an import of an agent\n * package that fails as a whole and for its preview.\n */\n snapshot(): () => void {\n return mockSnapshot(this.stored);\n }\n\n /** Forgets the values of an agent that was deleted, as the server removes them with it. */\n forget(agentId: string): void {\n this.stored.delete(agentId);\n }\n\n /** `GET admin/agents/{id}/metadata`, `PUT` and `DELETE admin/agents/{id}/metadata/{name}`. */\n handle(method: string, agentId: string, name: string | undefined, query: URLSearchParams, body: unknown): NhAssistantMockResult {\n if (!this.context.administers()) {\n return failure('assistant-forbidden');\n }\n if (name === undefined) {\n if (method !== 'GET') {\n return { status: 405 };\n }\n const agent = this.context.agent(agentId);\n return agent\n ? { status: 200, body: this.entries.map(entry => this.view(agent, entry)) }\n : failure('assistant-agent-not-found');\n }\n if (method !== 'PUT' && method !== 'DELETE') {\n return { status: 405 };\n }\n\n const entry = this.entries.find(item => item.name === name);\n if (!entry) {\n return failure('assistant-metadata-entry-not-found');\n }\n const agent = this.context.agent(agentId);\n if (!agent) {\n return failure('assistant-agent-not-found');\n }\n if (agent.source === 'code' && entry.editable !== true) {\n return failure('assistant-metadata-read-only');\n }\n\n return method === 'PUT'\n ? this.save(agent, entry, body as { value?: unknown; expectedVersion?: number | null } | undefined)\n : this.remove(agent, entry, query.get('expectedVersion'));\n }\n\n private save(\n agent: AdminAgent,\n entry: NhAssistantMockAgentMetadataEntry,\n request: { value?: unknown; expectedVersion?: number | null } | undefined\n ): NhAssistantMockResult {\n if (!request || typeof request !== 'object') {\n return failure('assistant-validation');\n }\n\n const errors: Record<string, string[]> = {};\n for (const [field, codes] of Object.entries(this.problemsOf(entry, request.value))) {\n errors[field === '' ? 'value' : `value.${field}`] = codes;\n }\n const expectedVersion = typeof request.expectedVersion === 'number' ? request.expectedVersion : null;\n if (agent.source !== 'code' && expectedVersion === null) {\n errors['expectedVersion'] = ['required'];\n }\n if (Object.keys(errors).length > 0) {\n return failure('assistant-validation', errors);\n }\n\n const values = this.valuesOf(this.stored, agent.id);\n const current = values.get(entry.name);\n let version: number;\n if (agent.source === 'code') {\n if (expectedVersion !== (current?.version ?? null)) {\n return failure('assistant-version-conflict');\n }\n version = (current?.version ?? 0) + 1;\n } else {\n if (expectedVersion !== agent.version) {\n return failure('assistant-version-conflict');\n }\n version = this.context.nextVersion(agent.id).version;\n }\n\n values.set(entry.name, { value: structuredClone(request.value as Record<string, unknown>), version, changedAt: this.now(), changedBy: 'current-user' });\n return { status: 200, body: this.view(this.context.agent(agent.id)!, entry) };\n }\n\n private remove(agent: AdminAgent, entry: NhAssistantMockAgentMetadataEntry, expected: string | null): NhAssistantMockResult {\n const values = this.valuesOf(this.stored, agent.id);\n const current = values.get(entry.name);\n if (!current) {\n return { status: 200, body: this.view(agent, entry) };\n }\n if (expected === null || !/^\\d+$/.test(expected)) {\n return failure('assistant-validation', { expectedVersion: ['required'] });\n }\n const expectedVersion = Number(expected);\n if (expectedVersion !== (agent.source === 'code' ? current.version : agent.version)) {\n return failure('assistant-version-conflict');\n }\n\n if (agent.source !== 'code') {\n this.context.nextVersion(agent.id);\n }\n values.delete(entry.name);\n return { status: 200, body: this.view(this.context.agent(agent.id)!, entry) };\n }\n\n /** The entry of the agent in effect, as `GET admin/agents/{id}/metadata` lists it. */\n private view(agent: AdminAgent, entry: NhAssistantMockAgentMetadataEntry): AgentMetadata {\n const stored = this.stored.get(agent.id)?.get(entry.name);\n const code = this.code.get(agent.id)?.get(entry.name);\n const inCode = agent.source === 'code';\n const value = stored?.value ?? (inCode ? code : undefined);\n const source: AgentMetadataSource | null = stored\n ? (inCode ? 'override' : 'data')\n : (inCode && code !== undefined ? 'code' : null);\n return {\n name: entry.name,\n editable: !inCode || entry.editable === true,\n maxBytes: entry.maxBytes ?? defaultMaxBytes,\n source,\n value: value === undefined ? null : structuredClone(value),\n version: inCode ? stored?.version ?? null : agent.version,\n agentVersion: agent.version,\n codeValue: inCode && code !== undefined ? structuredClone(code) : null,\n indexed: entry.indexBy !== undefined || entry.indexByEach !== undefined,\n indexValue: value !== undefined ? indexOf(entry, value) : null,\n indexedByEach: entry.indexByEach !== undefined,\n indexValues: value !== undefined ? indexValuesOf(entry, value) : [],\n changedAt: stored?.changedAt ?? null,\n changedBy: stored?.changedBy ?? null\n };\n }\n\n /** The problems of a value, by field path, `''` for the whole value, as the server checks it. */\n private problemsOf(entry: NhAssistantMockAgentMetadataEntry, value: unknown): Record<string, string[]> {\n if (value === null || value === undefined) {\n return { '': ['required'] };\n }\n if (typeof value !== 'object' || Array.isArray(value)\n || (entry.fields && Object.keys(value).some(field => !entry.fields!.includes(field)))) {\n return { '': ['invalid'] };\n }\n if (new TextEncoder().encode(JSON.stringify(value)).length > (entry.maxBytes ?? defaultMaxBytes)) {\n return { '': ['too-long'] };\n }\n const problems = { ...(entry.validate?.(value as Record<string, unknown>) ?? {}) };\n const index = indexOf(entry, value as Record<string, unknown>);\n if (index !== null && index.length > 256) {\n problems[''] = [...(problems[''] ?? []), 'too-long'];\n }\n return Object.fromEntries(Object.entries(problems).filter(([, codes]) => codes.length > 0));\n }\n\n private valuesOf<T>(map: Map<string, Map<string, T>>, agentId: string): Map<string, T> {\n let values = map.get(agentId);\n if (!values) {\n values = new Map<string, T>();\n map.set(agentId, values);\n }\n return values;\n }\n}\n\n/** The searchable value of a value, trimmed and in lowercase, as the server stores it. */\nfunction indexOf(entry: NhAssistantMockAgentMetadataEntry, value: Record<string, unknown>): string | null {\n if (entry.indexBy === undefined) {\n return null;\n }\n const text = value[entry.indexBy];\n const trimmed = typeof text === 'string' ? text.trim() : '';\n return trimmed.length > 0 ? trimmed.toLowerCase() : null;\n}\n\n/**\n * The searchable values of an `IndexByEach` entry's value as the server stores them: trimmed, in\n * lowercase, without empty values or repeats, in ordinal order.\n */\nfunction indexValuesOf(entry: NhAssistantMockAgentMetadataEntry, value: Record<string, unknown>): string[] {\n const texts = entry.indexByEach === undefined ? undefined : value[entry.indexByEach];\n if (!Array.isArray(texts)) {\n return [];\n }\n const values = texts\n .map(text => (typeof text === 'string' ? text.trim().toLowerCase() : ''))\n .filter(text => text.length > 0);\n return [...new Set(values)].sort((left, right) => (left < right ? -1 : left > right ? 1 : 0));\n}\n","import {\n AgentDecisionOutcome,\n AgentInbox,\n AgentInboxGroup,\n AgentInboxStatus,\n AgentInboxVisit,\n AgentProposal,\n AgentProposalLookup,\n AgentSubjectWorkProposal,\n NH_ASSISTANT_MAX_PROPOSAL_LOOKUP,\n NhAssistantConsultationRoute\n} from '@newheap/platform-ai-chat';\nimport { NhAssistantMockResult, mockFailure as failure } from './nh-assistant-mock-admin-shared';\nimport { NhAssistantMockProposal } from './nh-assistant-mock.models';\n\ninterface StoredProposal {\n proposal: AgentProposal;\n canDecide: boolean;\n reasonCode: string | null;\n divisionId: string | null;\n /** The application executes the proposal's tool (`ExecuteInApplication`). */\n executedByApplication: boolean;\n}\n\n/** How long the application may take to report after a hand-off in the mock. */\nconst reportWithinMs = 4 * 60 * 60 * 1000;\n\nconst dashCase = /^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/;\nconst maxReason = 500;\nconst maxItemsPerPage = 100;\nconst maxBulkDecisions = 50;\nconst guid = /^[0-9a-f]{8}-?[0-9a-f]{4}-?[0-9a-f]{4}-?[0-9a-f]{4}-?[0-9a-f]{12}$/i;\nconst lifetimeMs = 3 * 24 * 60 * 60 * 1000;\n/** The platform's subject type of the whole application. */\nconst systemType = 'nh-system';\n/** The person who asked decides a consultation's proposal in their own chat; nobody decides it in the thread. */\nconst askerDecidesCode = 'assistant-consult-asker-decides';\n/** Someone other than the person who started the work decides it. */\nconst fourEyesCode = 'assistant-four-eyes-required';\n\n/**\n * The proposals the scenario lists, which the mock's agents left, for example one a run for the whole\n * application placed at a project (`placedBy`). The mock runs no agents: it serves them as the server\n * does in the approval inbox (`GET approvals/inbox`, pending proposals the caller may decide), one by id\n * (`GET approvals/{id}`), several by id (`POST approvals/lookup`), in their thread\n * (`GET threads/{id}/proposals`) and on their subject's work, and decides them one by one or together\n * with the server's validation and statuses. An approved proposal executes at once. A proposal of the\n * whole application (`nh-system`) exists only for the approvers of the whole application who pass the\n * agent's view policy (`mayDecideApplication`): for anybody else the inbox leaves it out, reading it\n * answers `404` and deciding it `404 assistant-approval-not-found`. A consultation's proposal that the\n * person who asked decides in their own chat (`asker-decides`) waits inline and is refused here with\n * `assistant-consult-asker-decides`; one that runs with the agent's own rights refuses its asker with\n * `assistant-four-eyes-required`. A proposal of a tool the application executes (`executedByApplication`)\n * waits as `awaiting-application` once approved, and `POST approvals/{id}/resolve` resolves an\n * `execution-unknown` proposal as the server does: `hand-to-application` for one the application\n * executes, `re-execute` for any other, `mark-resolved` for both.\n */\nexport class NhAssistantMockProposals {\n private readonly proposals = new Map<string, StoredProposal>();\n /** When the caller last looked at the inbox, by scope key. */\n private readonly visits = new Map<string, string>();\n\n constructor(\n scenario: readonly NhAssistantMockProposal[] = [],\n private readonly actorId: () => string,\n private readonly now: () => string,\n private readonly mayDecideApplication: (agentId: string) => boolean = () => true,\n private readonly decided: (proposal: AgentProposal) => void = () => undefined,\n private readonly mayWorkIn: (divisionId: string) => boolean = () => true\n ) {\n const created = new Date(now()).getTime();\n for (const item of scenario) {\n if (this.proposals.has(item.approvalId)) {\n throw new Error(`Mock proposal '${item.approvalId}' is listed twice.`);\n }\n if (!dashCase.test(item.subjectType)) {\n throw new Error(`Mock proposal '${item.approvalId}' names subject type '${item.subjectType}', which is not dash-case.`);\n }\n if (item.consultationRoute && !item.consultationId) {\n throw new Error(`Mock proposal '${item.approvalId}' names a consultation route without its consultation.`);\n }\n const route = item.consultationRoute ?? null;\n const refusal = consultationRefusal(route, item.initiatorActorId ?? null, actorId());\n const canDecide = item.canDecide ?? refusal === null;\n const executedByApplication = item.executedByApplication ?? false;\n const handedOff = executedByApplication && (item.status === 'awaiting-application' || item.status === 'execution-unknown');\n const madeAt = item.createdAt ?? new Date(created).toISOString();\n this.proposals.set(item.approvalId, {\n proposal: {\n approvalId: item.approvalId,\n proposalId: `${item.approvalId}-proposal`,\n proposalHash: `sha256:${item.approvalId}`,\n conversationId: item.conversationId ?? `${item.approvalId}-thread`,\n runId: item.runId ?? null,\n agentId: item.agentId,\n subjectType: item.subjectType,\n subjectId: item.subjectId,\n subjectDisplayName: item.subjectDisplayName ?? null,\n subjectTypeName: item.subjectTypeName ?? null,\n subjectLink: item.subjectLink ?? null,\n toolId: item.toolId,\n summary: 'Approval is required before this tool can run.',\n presentation: item.presentation ?? null,\n argumentsPreview: '{}',\n targets: [],\n status: item.status ?? 'pending',\n mode: route === 'asker-decides' ? 'inline' : 'deferred',\n policyId: null,\n grantSource: item.grantSource ?? (route === 'subject-asker-rights' ? 'delegated' : 'agent'),\n createdAt: item.createdAt ?? new Date(created).toISOString(),\n expiresAt: item.expiresAt ?? new Date(Date.parse(item.createdAt ?? new Date(created).toISOString()) + lifetimeMs).toISOString(),\n initiatorActorId: item.initiatorActorId ?? null,\n decidedByActorId: null,\n decidedAt: null,\n executionResultCode: item.executionResultCode ?? null,\n executedAt: null,\n executionReportDueAt: handedOff\n ? item.executionReportDueAt ?? new Date(Date.parse(madeAt) + reportWithinMs).toISOString()\n : null,\n rationale: item.rationale ?? null,\n placedBy: item.placedBy ?? null,\n parent: item.parent ?? null,\n canGiveFeedback: false,\n consultationId: item.consultationId ?? null,\n consultationRoute: route\n },\n divisionId: item.divisionId ?? null,\n canDecide,\n reasonCode: canDecide ? null : item.reasonCode ?? refusal ?? 'assistant-approval-policy-denied',\n executedByApplication\n });\n }\n }\n\n /** `GET`/`POST approvals/…`; `null` for paths the mock does not serve. */\n handle(method: string, segments: string[], query: URLSearchParams, body: unknown): NhAssistantMockResult | null {\n if (segments.length === 2 && segments[1] === 'inbox') {\n return method === 'GET' ? this.inbox(query) : { status: 405 };\n }\n if (segments.length === 3 && segments[1] === 'inbox' && segments[2] === 'visit') {\n return method === 'POST' ? this.visit(query) : { status: 405 };\n }\n if (segments.length === 2 && segments[1] === 'lookup') {\n return method === 'POST' ? this.lookup(body) : { status: 405 };\n }\n if (segments.length === 2 && segments[1] === 'decisions') {\n return method === 'POST' ? this.decideMany(body) : { status: 405 };\n }\n if (segments.length === 2) {\n return method === 'GET' ? this.read(segments[1]) : { status: 405 };\n }\n if (segments.length === 3 && segments[2] === 'decisions') {\n return method === 'POST' ? this.decideOne(segments[1], body) : { status: 405 };\n }\n if (segments.length === 3 && segments[2] === 'resolve') {\n return method === 'POST' ? this.resolve(segments[1], body) : { status: 405 };\n }\n return null;\n }\n\n /** The proposals waiting in a thread, newest first; `null` when the scenario lists none there. */\n ofThread(conversationId: string): AgentProposal[] | null {\n const items = this.visible()\n .filter(item => item.proposal.conversationId === conversationId)\n .map(item => item.proposal)\n .reverse();\n return items.length === 0 ? null : items;\n }\n\n /** The proposals a consultation left per route; routes without proposals are left out. */\n consultationCounts(consultationId: string): { total: number; byRoute: Partial<Record<NhAssistantConsultationRoute, number>> } {\n const byRoute: Partial<Record<NhAssistantConsultationRoute, number>> = {};\n let total = 0;\n for (const { proposal } of this.proposals.values()) {\n if (proposal.consultationId !== consultationId) {\n continue;\n }\n total++;\n if (proposal.consultationRoute) {\n byRoute[proposal.consultationRoute] = (byRoute[proposal.consultationRoute] ?? 0) + 1;\n }\n }\n return { total, byRoute };\n }\n\n /** The proposals of a run the caller may see, in the order the scenario lists them. */\n ofRun(runId: string): AgentProposal[] {\n return this.visible()\n .filter(item => item.proposal.runId === runId)\n .map(item => item.proposal);\n }\n\n /** The pending proposals on a subject with the caller's right to decide each, earliest expiry first. */\n openOfSubject(subjectType: string, subjectId: string): AgentSubjectWorkProposal[] {\n return this.visible()\n .filter(item => item.proposal.subjectType === subjectType && item.proposal.subjectId === subjectId && item.proposal.status === 'pending')\n .map(item => this.withRight(item));\n }\n\n /** The proposals the caller may see: those of the whole application only for its approvers. */\n private visible(): StoredProposal[] {\n return [...this.proposals.values()].filter(item => this.isVisible(item));\n }\n\n private isVisible(item: StoredProposal): boolean {\n return item.proposal.subjectType !== systemType || this.mayDecideApplication(item.proposal.agentId);\n }\n\n /** A proposal by id that the caller may see. */\n private find(approvalId: string): StoredProposal | undefined {\n const stored = this.proposals.get(approvalId);\n return stored && this.isVisible(stored) ? stored : undefined;\n }\n\n private inbox(query: URLSearchParams): NhAssistantMockResult {\n const page = Number(query.get('page') ?? '1');\n const itemsPerPage = Number(query.get('itemsPerPage') ?? '20');\n const subjectType = query.get('subjectType');\n if (!Number.isInteger(page) || page < 1\n || !Number.isInteger(itemsPerPage) || itemsPerPage < 1 || itemsPerPage > maxItemsPerPage\n || (subjectType !== null && !dashCase.test(subjectType))) {\n return failure('assistant-message-invalid');\n }\n\n const agentId = query.get('agentId');\n const runId = query.get('runId');\n const divisionId = query.get('divisionId');\n if (divisionId !== null && !guid.test(divisionId)) {\n return { status: 400 };\n }\n\n // What waits for a decision by default; what waits for the application's report or for an\n // approver to resolve an uncertain execution on request, with the same visibility.\n const status = query.get('status') || 'pending';\n if (!isInboxStatus(status)) {\n return failure('assistant-message-invalid');\n }\n\n const grouped = query.get('grouped') === 'true';\n const items = this.visible()\n .filter(item => item.proposal.status === status && item.canDecide)\n .filter(item => divisionId === null || sameGuid(item.divisionId, divisionId))\n .map(item => item.proposal)\n .filter(proposal => (subjectType === null || proposal.subjectType === subjectType)\n && (agentId === null || proposal.agentId === agentId)\n && (runId === null || proposal.runId === runId))\n .sort((left, right) => inboxSortAt(left, status).localeCompare(inboxSortAt(right, status))\n || left.approvalId.localeCompare(right.approvalId));\n const ordered = grouped ? groupedOrder(items) : items;\n const offset = (page - 1) * itemsPerPage;\n const pageItems = ordered.slice(offset, offset + itemsPerPage);\n const scopeKey = scopeKeyOf(divisionId);\n const lastVisitedAt = this.visits.get(scopeKey) ?? null;\n const body: AgentInbox = {\n items: pageItems,\n total: items.length,\n status,\n scopeKey,\n lastVisitedAt,\n newApprovalIds: pageItems\n .filter(proposal => lastVisitedAt === null || Date.parse(proposal.createdAt) > Date.parse(lastVisitedAt))\n .map(proposal => proposal.approvalId),\n groups: grouped ? groupsOf(ordered, offset, pageItems.length) : null\n };\n return { status: 200, body };\n }\n\n /** `POST approvals/inbox/visit`: the whole inbox, or that of a division the caller works in. */\n private visit(query: URLSearchParams): NhAssistantMockResult {\n const divisionId = query.get('divisionId');\n if (divisionId !== null && !guid.test(divisionId)) {\n return { status: 400 };\n }\n if (divisionId !== null && !this.mayWorkIn(divisionId)) {\n return failure('assistant-subject-not-found');\n }\n\n const body: AgentInboxVisit = { scopeKey: scopeKeyOf(divisionId), visitedAt: this.now() };\n this.visits.set(body.scopeKey, body.visitedAt);\n return { status: 200, body };\n }\n\n private read(approvalId: string): NhAssistantMockResult {\n const stored = this.find(approvalId);\n return stored ? { status: 200, body: this.withRight(stored) } : failure('assistant-approval-not-found');\n }\n\n private lookup(body: unknown): NhAssistantMockResult {\n const ids = (body as { approvalIds?: unknown } | undefined)?.approvalIds;\n if (!Array.isArray(ids) || ids.length === 0 || ids.some(id => typeof id !== 'string')) {\n return failure('assistant-message-invalid');\n }\n const distinct = [...new Set(ids as string[])];\n if (distinct.length > NH_ASSISTANT_MAX_PROPOSAL_LOOKUP) {\n return failure('assistant-message-invalid');\n }\n\n const response: AgentProposalLookup = {\n items: distinct\n .map(id => this.find(id))\n .filter((item): item is StoredProposal => item !== undefined)\n .map(item => this.withRight(item))\n };\n return { status: 200, body: response };\n }\n\n private decideOne(approvalId: string, body: unknown): NhAssistantMockResult {\n const request = body as { decision?: unknown; expectedProposalHash?: unknown; reason?: unknown } | undefined;\n if (!validDecision(request)) {\n return failure('assistant-approval-decision-invalid');\n }\n\n const outcome = this.decide(approvalId, request!.decision === 'approve', request!.expectedProposalHash);\n return outcome.code === null\n ? { status: 200, body: this.proposals.get(approvalId)!.proposal }\n : failure(outcome.code);\n }\n\n private decideMany(body: unknown): NhAssistantMockResult {\n const request = body as { approvalIds?: unknown; decision?: unknown; reason?: unknown } | undefined;\n const ids = request?.approvalIds;\n if (!validDecision(request)\n || !Array.isArray(ids)\n || ids.length === 0\n || ids.length > maxBulkDecisions\n || ids.some(id => typeof id !== 'string')) {\n return failure('assistant-approval-decision-invalid');\n }\n\n const results: AgentDecisionOutcome[] = [...new Set(ids as string[])].map(id => {\n const outcome = this.decide(id, request!.decision === 'approve', null);\n return {\n approvalId: id,\n succeeded: outcome.code === null,\n code: outcome.code,\n status: outcome.code === null ? this.proposals.get(id)!.proposal.status : null\n };\n });\n return { status: 200, body: { results } };\n }\n\n /** Decides one proposal as the server does; an approved proposal executes at once. */\n private decide(approvalId: string, approve: boolean, expectedHash: unknown): { code: string | null } {\n const stored = this.find(approvalId);\n if (!stored) {\n return { code: 'assistant-approval-not-found' };\n }\n if (typeof expectedHash === 'string' && expectedHash !== stored.proposal.proposalHash) {\n return { code: 'assistant-proposal-hash-mismatch' };\n }\n if (stored.proposal.status !== 'pending') {\n return { code: 'assistant-approval-not-pending' };\n }\n if (!stored.canDecide) {\n return { code: stored.reasonCode ?? 'assistant-approval-policy-denied' };\n }\n\n const now = this.now();\n // A proposal the application executes is handed to it and waits for its report.\n const handedOff = approve && stored.executedByApplication;\n stored.proposal = {\n ...stored.proposal,\n status: approve ? (handedOff ? 'awaiting-application' : 'executed') : 'rejected',\n decidedByActorId: this.actorId(),\n decidedAt: now,\n executedAt: approve && !handedOff ? now : null,\n executionReportDueAt: handedOff ? new Date(Date.parse(now) + reportWithinMs).toISOString() : null\n };\n this.decided(stored.proposal);\n return { code: null };\n }\n\n /**\n * `POST approvals/{id}/resolve` as the server answers it: only an `execution-unknown` proposal, which\n * a proposal the application executes resolves with `hand-to-application` or `mark-resolved` and\n * every other one with `re-execute` or `mark-resolved`. Handed to the application again, it waits\n * for its report once more; run again, it executes at once.\n */\n private resolve(approvalId: string, body: unknown): NhAssistantMockResult {\n const request = body as { action?: unknown; reason?: unknown } | undefined;\n const action = request?.action;\n if (action !== 're-execute' && action !== 'hand-to-application' && action !== 'mark-resolved') {\n return failure('assistant-approval-decision-invalid');\n }\n const stored = this.find(approvalId);\n if (!stored) {\n return failure('assistant-approval-not-found');\n }\n if (stored.proposal.status !== 'execution-unknown') {\n return failure('assistant-execution-not-uncertain');\n }\n if (!stored.canDecide) {\n return failure(stored.reasonCode ?? 'assistant-approval-policy-denied');\n }\n const handedOff = !!stored.proposal.executionReportDueAt;\n if ((action === 'hand-to-application' && !handedOff) || (action === 're-execute' && handedOff)) {\n return failure('assistant-approval-decision-invalid');\n }\n\n const now = this.now();\n stored.proposal = {\n ...stored.proposal,\n status: action === 'mark-resolved' ? 'resolved' : action === 'hand-to-application' ? 'awaiting-application' : 'executed',\n decidedByActorId: this.actorId(),\n executedAt: action === 're-execute' ? now : stored.proposal.executedAt,\n executionResultCode: action === 'mark-resolved' ? 'resolved-by-approver' : null,\n executionReportDueAt: action === 'hand-to-application'\n ? new Date(Date.parse(now) + reportWithinMs).toISOString()\n : stored.proposal.executionReportDueAt\n };\n this.decided(stored.proposal);\n return { status: 200, body: stored.proposal };\n }\n\n private withRight(item: StoredProposal): AgentSubjectWorkProposal {\n const pending = item.proposal.status === 'pending';\n return {\n proposal: item.proposal,\n canDecide: pending && item.canDecide,\n reasonCode: pending && !item.canDecide ? item.reasonCode : null\n };\n }\n}\n\n/**\n * Why nobody, or not the caller, decides a consultation's proposal here: the person who asked decides\n * an `asker-decides` proposal in their own chat, and four-eyes keeps the asker out of a proposal that\n * runs with the agent's own rights; `null` when the route does not keep the caller out.\n */\nfunction consultationRefusal(route: NhAssistantConsultationRoute | null, initiatorActorId: string | null, actorId: string): string | null {\n if (route === 'asker-decides') {\n return askerDecidesCode;\n }\n return route === 'subject-agent-rights' && initiatorActorId === actorId ? fourEyesCode : null;\n}\n\nfunction isInboxStatus(status: string): status is AgentInboxStatus {\n return status === 'pending' || status === 'awaiting-application' || status === 'execution-unknown';\n}\n\n/**\n * The time the inbox lists a proposal by, as the server: a pending one by its expiry, one handed to the\n * application by its report deadline, an uncertain execution by its decision.\n */\nfunction inboxSortAt(proposal: AgentProposal, status: AgentInboxStatus): string {\n switch (status) {\n case 'awaiting-application':\n return proposal.executionReportDueAt ?? proposal.expiresAt;\n case 'execution-unknown':\n return proposal.decidedAt ?? proposal.createdAt;\n default:\n return proposal.expiresAt;\n }\n}\n\n/** The scope of the inbox's visits: `global`, or the scope key of a division. */\nfunction scopeKeyOf(divisionId: string | null): string {\n return divisionId === null ? 'global' : `division:${divisionId.replaceAll('-', '').toLowerCase()}`;\n}\n\nfunction sameGuid(left: string | null, right: string): boolean {\n return left !== null && left.replaceAll('-', '').toLowerCase() === right.replaceAll('-', '').toLowerCase();\n}\n\n/** The group a proposal belongs to: its parent, or its own subject without one. */\nfunction groupKeyOf(proposal: AgentProposal): string {\n return proposal.parent\n ? `${proposal.parent.subjectType}|${proposal.parent.subjectId}`\n : `${proposal.subjectType}|${proposal.subjectId}`;\n}\n\nfunction subjectKeyOf(proposal: AgentProposal): string {\n return `${groupKeyOf(proposal)}|${proposal.subjectType}|${proposal.subjectId}`;\n}\n\nfunction firstExpiries(items: readonly AgentProposal[], key: (proposal: AgentProposal) => string): Map<string, string> {\n const first = new Map<string, string>();\n for (const proposal of items) {\n const current = first.get(key(proposal));\n if (current === undefined || proposal.expiresAt < current) {\n first.set(key(proposal), proposal.expiresAt);\n }\n }\n return first;\n}\n\n/**\n * The order of the grouped inbox, as the server sorts: groups by their first expiry, a group's own\n * subject first, then its other subjects by their first expiry, one run's proposals together, then by\n * expiry.\n */\nfunction groupedOrder(items: readonly AgentProposal[]): AgentProposal[] {\n const groups = firstExpiries(items, groupKeyOf);\n const subjects = firstExpiries(items, subjectKeyOf);\n const compare = (left: string, right: string) => (left < right ? -1 : left > right ? 1 : 0);\n return [...items].sort((left, right) =>\n compare(groups.get(groupKeyOf(left))!, groups.get(groupKeyOf(right))!)\n || compare(groupKeyOf(left), groupKeyOf(right))\n || (left.parent ? 1 : 0) - (right.parent ? 1 : 0)\n || compare(subjects.get(subjectKeyOf(left))!, subjects.get(subjectKeyOf(right))!)\n || compare(subjectKeyOf(left), subjectKeyOf(right))\n || (left.runId === null ? 1 : 0) - (right.runId === null ? 1 : 0)\n || compare(left.runId ?? '', right.runId ?? '')\n || compare(left.expiresAt, right.expiresAt)\n || compare(left.approvalId, right.approvalId));\n}\n\n/** The groups of the page `ordered[offset, offset + count)`, with their totals and continuation. */\nfunction groupsOf(ordered: readonly AgentProposal[], offset: number, count: number): AgentInboxGroup[] {\n const page = ordered.slice(offset, offset + count);\n const previous = offset > 0 ? ordered[offset - 1] : undefined;\n const next = ordered[offset + count];\n const groups: AgentInboxGroup[] = [];\n for (let index = 0; index < page.length;) {\n const key = groupKeyOf(page[index]);\n let end = index;\n while (end < page.length && groupKeyOf(page[end]) === key) {\n end++;\n }\n\n const members = page.slice(index, end);\n const own = members.find(proposal => !proposal.parent);\n const parent = members.find(proposal => proposal.parent)?.parent ?? null;\n const subjects: AgentInboxGroup['subjects'] = [];\n for (let at = 0; at < members.length;) {\n const subjectKey = subjectKeyOf(members[at]);\n let stop = at;\n while (stop < members.length && subjectKeyOf(members[stop]) === subjectKey) {\n stop++;\n }\n subjects.push({\n subjectType: members[at].subjectType,\n subjectId: members[at].subjectId,\n count: stop - at,\n total: ordered.filter(proposal => subjectKeyOf(proposal) === subjectKey).length,\n continuesFromPreviousPage: index === 0 && at === 0 && previous !== undefined && subjectKeyOf(previous) === subjectKey,\n continuesOnNextPage: end === page.length && stop === members.length && next !== undefined && subjectKeyOf(next) === subjectKey\n });\n at = stop;\n }\n\n groups.push({\n subjectType: own?.subjectType ?? parent!.subjectType,\n subjectId: own?.subjectId ?? parent!.subjectId,\n displayName: own ? own.subjectDisplayName : parent!.displayName,\n subjectTypeName: own ? own.subjectTypeName ?? null : parent!.subjectTypeName ?? null,\n subjectLink: own ? own.subjectLink ?? null : parent!.subjectLink ?? null,\n count: members.length,\n total: ordered.filter(proposal => groupKeyOf(proposal) === key).length,\n continuesFromPreviousPage: index === 0 && previous !== undefined && groupKeyOf(previous) === key,\n continuesOnNextPage: end === page.length && next !== undefined && groupKeyOf(next) === key,\n subjects\n });\n index = end;\n }\n return groups;\n}\n\nfunction validDecision(request: { decision?: unknown; reason?: unknown } | undefined): boolean {\n return !!request\n && (request.decision === 'approve' || request.decision === 'reject')\n && (request.reason === undefined || request.reason === null || (typeof request.reason === 'string' && request.reason.length <= maxReason));\n}\n","import {\n McpAuthorizationStart,\n NhAssistantMcpAuthorizationHandle,\n NhAssistantMcpAuthorizationOutcome,\n NhAssistantMcpAuthorizationWindow\n} from '@newheap/platform-ai-chat';\nimport { Observable } from 'rxjs';\n\n/**\n * The authorization window of the mock API: instead of a popup at an authorization server it plays\n * the callback of the started flow right away, as the scenario's `admin.mcpAuthorization` says. It\n * records the authorization URLs it was asked to show.\n */\nexport class NhAssistantMockAuthorizationWindow implements NhAssistantMcpAuthorizationWindow {\n /** The authorization URLs shown, oldest first. */\n readonly shown: string[] = [];\n /** How many windows were closed without finishing, for example because starting failed. */\n closed = 0;\n\n constructor(private readonly callback: (flowId: string) => NhAssistantMcpAuthorizationOutcome) {}\n\n open(): NhAssistantMcpAuthorizationHandle {\n return {\n authorize: (start: McpAuthorizationStart) => new Observable<NhAssistantMcpAuthorizationOutcome>(subscriber => {\n this.shown.push(start.authorizationUrl);\n const timer = setTimeout(() => {\n subscriber.next(this.callback(start.flowId));\n subscriber.complete();\n });\n return () => clearTimeout(timer);\n }),\n close: () => {\n this.closed++;\n }\n };\n }\n}\n","import { Injectable, InjectionToken, inject, signal } from '@angular/core';\nimport {\n AgentConsultationList,\n AgentUploads,\n AnswerQuestionRequest,\n ApplicationMessageDetails,\n ApprovalPart,\n ClientContext,\n Conversation,\n ConversationMember,\n ConversationSummary,\n CreateConversationRequest,\n DecideApprovalRequest,\n FileReference,\n LiveAgentWorkChanged,\n LiveConversationChanged,\n LiveConversationEvent,\n LiveConversationRead,\n LiveConversationRemoved,\n Message,\n MessagePart,\n NH_ASSISTANT_CONFIG,\n NhAssistantSseEvent,\n NhAssistantUploadRequest,\n QuestionPart,\n ResolveApprovalRequest,\n SendMessageRequest,\n TurnUsage,\n applyNhAssistantApprovalDecision,\n applyNhAssistantEvent,\n applyNhAssistantQuestionAnswer,\n normalizeNhAssistantClientContext\n} from '@newheap/platform-ai-chat';\nimport { Observable, Subject } from 'rxjs';\nimport { NhAssistantMockAdmin } from './nh-assistant-mock-admin';\nimport { NhAssistantMockResult, mockFailure } from './nh-assistant-mock-admin-shared';\nimport { NhAssistantMockAgentPackages } from './nh-assistant-mock-agent-packages';\nimport { NhAssistantMockFiles } from './nh-assistant-mock-files';\nimport { NhAssistantMockAgentRuns } from './nh-assistant-mock-agent-runs';\nimport { NhAssistantMockBoards } from './nh-assistant-mock-boards';\nimport { NhAssistantMockAgentMetadata } from './nh-assistant-mock-agent-metadata';\nimport { NhAssistantMockProposals } from './nh-assistant-mock-proposals';\nimport { NhAssistantMockSubjects, divisionSubjectId } from './nh-assistant-mock-subjects';\nimport { mockSystemSubjectType } from './nh-assistant-mock-works-on';\nimport { NhAssistantMockAuthorizationWindow } from './nh-assistant-mock-authorization';\nimport {\n NhAssistantMockApprovalStep,\n NhAssistantMockInstructionAsset,\n NhAssistantMockPerson,\n NhAssistantMockQuestionStep,\n NhAssistantMockRemoteTool,\n NhAssistantMockRequest,\n NhAssistantMockScenario,\n NhAssistantMockStep,\n NhAssistantMockTurn\n} from './nh-assistant-mock.models';\n\nexport const NH_ASSISTANT_MOCK_SCENARIO = new InjectionToken<NhAssistantMockScenario>('NH_ASSISTANT_MOCK_SCENARIO');\n\n/** Path the mock reports as hub; the mock live service answers it in memory. */\nexport const NH_ASSISTANT_MOCK_HUB_PATH = '/hub/assistant-mock';\n\n/**\n * One live update of the mock, as the assistant hub would send it. Agent work for the whole\n * application (`wholeApplication`) reaches the caller only while a screen watches it, as on the hub.\n */\nexport type NhAssistantMockLiveMessage =\n | { kind: 'changed'; data: LiveConversationChanged }\n | { kind: 'read'; data: LiveConversationRead }\n | { kind: 'removed'; data: LiveConversationRemoved }\n | { kind: 'event'; data: LiveConversationEvent }\n | { kind: 'agent-work'; data: LiveAgentWorkChanged; wholeApplication: boolean };\n\nconst defaultLimits = { maxMessageChars: 4_000, maxToolCallsPerTurn: 8 };\nconst defaultUser: NhAssistantMockPerson = { actorId: 'mock-user', displayName: 'You' };\n\ninterface PendingApproval {\n approval: ApprovalPart;\n invocationId: string;\n assistantMessageId: string;\n step: NhAssistantMockApprovalStep['approval'];\n}\n\ninterface PendingQuestion {\n question: QuestionPart;\n step: NhAssistantMockQuestionStep['question'];\n}\n\n/** The tool of `ask_question`, as the server records its call. */\nconst askQuestionToolId = 'assistant.ask-question';\n\n/** When the scenario's consultations started, when they name no time. */\nconst consultationStart = new Date().toISOString();\n\ninterface ActiveRun {\n cancelled: boolean;\n aborted: boolean;\n}\n\nclass RunStopped extends Error {}\n\ntype Emit = (event: NhAssistantSseEvent) => Promise<void>;\n\n/**\n * In-memory implementation of the assistant HTTP API and its event streams. It keeps\n * conversations, plays scripted turns as contract events through a real\n * `text/event-stream` response and handles approvals, cancellation and the feature flag.\n */\n@Injectable()\nexport class NhAssistantMockBackend {\n private readonly scenario = inject(NH_ASSISTANT_MOCK_SCENARIO);\n private readonly config = inject(NH_ASSISTANT_CONFIG);\n private readonly conversations = new Map<string, Conversation>();\n private readonly pendingApprovals = new Map<string, PendingApproval>();\n private readonly pendingQuestions = new Map<string, PendingQuestion>();\n private readonly runs = new Map<string, ActiveRun>();\n /** Page context of the latest message per conversation, as the server stores it. */\n private readonly pageContexts = new Map<string, ClientContext | null>();\n private readonly enabledState = signal(this.scenario.enabled ?? true);\n private readonly admin = new NhAssistantMockAdmin(this.scenario, () => new Date().toISOString());\n private readonly currentUser = this.scenario.collaboration?.currentUser ?? defaultUser;\n private readonly proposals = new NhAssistantMockProposals(\n this.scenario.proposals,\n () => this.currentUser.actorId,\n () => new Date().toISOString(),\n agentId => this.decidesForApplication(agentId),\n proposal => this.publishAgentWork({\n conversationId: proposal.conversationId,\n reason: 'proposal',\n approvalId: proposal.approvalId,\n runId: proposal.runId,\n subjectType: proposal.subjectType,\n subjectId: proposal.subjectId\n }, proposal.agentId),\n (divisionId: string): boolean => this.subjects.describe(mockSystemSubjectType, divisionSubjectId({ id: divisionId, name: '' }), null, this.admin.administers) != null);\n private readonly subjects = new NhAssistantMockSubjects(\n this.scenario.subjectTypes,\n this.scenario.divisions,\n (type, id) => this.proposals.openOfSubject(type, id));\n private readonly agentRuns = new NhAssistantMockAgentRuns(\n this.scenario,\n this.subjects,\n {\n agents: () => this.admin.allAgents(),\n administers: () => this.admin.administers,\n threadProposals: conversationId => this.proposals.ofThread(conversationId),\n threadConsultations: conversationId => this.consultationsOf(conversationId),\n runProposals: runId => this.proposals.ofRun(runId),\n workChanged: (change, agentId) => this.publishAgentWork(change, agentId)\n },\n () => new Date().toISOString());\n private readonly boards = new NhAssistantMockBoards(\n this.scenario,\n this.subjects,\n this.agentRuns,\n {\n agents: () => this.admin.allAgents(),\n administers: () => this.admin.administers\n },\n () => new Date().toISOString());\n private readonly agentMetadata = new NhAssistantMockAgentMetadata(\n this.scenario,\n {\n agent: agentId => this.admin.findAgent(agentId),\n administers: () => this.admin.administers,\n nextVersion: agentId => this.admin.nextAgentVersion(agentId)\n },\n () => new Date().toISOString());\n /** Agent packages: their endpoints, and the locks and links of every other administration request. */\n private readonly agentPackages = new NhAssistantMockAgentPackages({\n call: (method, path, body) => this.adminCall(method, path, body),\n codeDefinition: agentId => this.admin.codeDefinition(agentId),\n snapshot: () => {\n const restores = [this.admin.snapshot(), this.agentMetadata.snapshot(), this.boards.snapshot()];\n return () => {\n for (const restore of restores) {\n restore();\n }\n };\n },\n now: () => new Date().toISOString()\n });\n private readonly canAdministerState = signal(this.admin.administers);\n private readonly members = new Map<string, ConversationMember[]>();\n private readonly readPositions = new Map<string, number>();\n private readonly shareTokens = new Map<string, string>();\n private readonly activeActors = new Map<string, string>();\n private readonly liveSubject = new Subject<NhAssistantMockLiveMessage>();\n private readonly files = new NhAssistantMockFiles(this.scenario.refuseUpload, this.scenario.scanUpload);\n private pushEnabled = true;\n private sequence = 0;\n\n /** Requests received so far, oldest first. */\n readonly requests: NhAssistantMockRequest[] = [];\n readonly enabled = this.enabledState.asReadonly();\n readonly canAdminister = this.canAdministerState.asReadonly();\n /** Live updates for the mock live service, in the order the hub would send them. */\n readonly live$: Observable<NhAssistantMockLiveMessage> = this.liveSubject.asObservable();\n\n constructor() {\n for (const conversation of this.scenario.conversations ?? []) {\n const copy = withSequences(structuredClone(conversation));\n this.conversations.set(copy.id, copy);\n this.readPositions.set(copy.id, lastSequence(copy));\n }\n // The packages the host imported before, once its agents and run configurations are in place.\n this.agentPackages.importPresets(this.scenario.admin?.agentPackages ?? []);\n }\n\n /**\n * Plays a scripted turn as another person in the conversation, as if a colleague with an\n * invitation sent a message: the conversation becomes shared, and the message and the\n * answer arrive as live updates. Resolves when the turn ends.\n */\n async simulateParticipantTurn(conversationId: string, person: NhAssistantMockPerson, text: string): Promise<void> {\n const conversation = this.conversations.get(conversationId);\n if (!conversation || !acceptsMessage(conversation.status)) {\n return;\n }\n\n this.addMember(conversationId, person, 'participant');\n const userMessage: Message = {\n id: this.nextId(),\n role: 'user',\n createdAt: new Date().toISOString(),\n parts: [{ type: 'text', text }],\n authorActorId: person.actorId\n };\n this.activeActors.set(conversationId, person.actorId);\n this.update(conversationId, current => ({ ...current, status: 'running', messages: [...current.messages, userMessage] }));\n const stored = this.conversations.get(conversationId)!.messages.find(message => message.id === userMessage.id)!;\n this.emitLive({ kind: 'event', data: { conversationId, actorId: person.actorId, type: 'message.created', data: stored } });\n\n const timing = this.scenario.timing ?? {};\n const assistantMessageId = this.nextId();\n const emit: Emit = async event => {\n await delay(timing.eventDelayMs ?? 40);\n this.update(conversationId, current => applyNhAssistantEvent(current, event));\n if (event.type === 'turn.completed' && event.data.status !== 'waiting-for-approval') {\n this.activeActors.delete(conversationId);\n this.emitChanged(conversationId);\n }\n this.emitLive({ kind: 'event', data: { conversationId, actorId: person.actorId, type: event.type, data: event.data } });\n };\n await delay(timing.firstEventDelayMs ?? 200);\n await emit({ type: 'turn.started', data: { turnId: this.nextId(), userMessageId: userMessage.id, assistantMessageId } });\n const turn = this.findTurn(text, conversation.agentId, null);\n await this.playSteps(conversationId, assistantMessageId, turn?.steps ?? [], emit);\n }\n\n /**\n * Posts a message of the application into a conversation, as `INhAssistantConversationMessages`\n * does on the server: it gets the next position in the conversation and reaches the people of the\n * conversation as a live update. `trusted` marks an instruction for the assistant, as `Trusted`\n * does on the server. Returns the stored message, or `null` for an unknown or archived conversation.\n */\n postApplicationMessage(\n conversationId: string,\n text: string,\n details: Partial<ApplicationMessageDetails> = {}\n ): Message | null {\n const conversation = this.conversations.get(conversationId);\n if (!conversation || conversation.status === 'archived') {\n return null;\n }\n\n const message: Message = {\n id: this.nextId(),\n role: 'application',\n createdAt: new Date().toISOString(),\n parts: [{ type: 'text', text }],\n authorActorId: null,\n authorKind: 'application',\n application: {\n title: details.title ?? null,\n senderName: details.senderName ?? null,\n link: details.link ?? null,\n trusted: details.trusted ?? false\n }\n };\n this.update(conversationId, current => ({ ...current, messages: [...current.messages, message] }));\n const stored = this.conversations.get(conversationId)!.messages.find(item => item.id === message.id)!;\n this.emitLive({ kind: 'event', data: { conversationId, actorId: 'application', type: 'message.created', data: stored } });\n this.emitChanged(conversationId);\n return stored;\n }\n\n /** Switches the simulated `NewHeap:AI:Assistant:Enabled` flag. */\n setEnabled(enabled: boolean): void {\n this.enabledState.set(enabled);\n }\n\n /** Switches whether the caller passes the admin policy (`canAdminister`, `admin/*`). */\n setCanAdminister(canAdminister: boolean): void {\n this.admin.setCanAdminister(canAdminister);\n this.canAdministerState.set(canAdminister);\n }\n\n /** Replaces the tools a simulated MCP server lists; the next sync picks them up. */\n setRemoteTools(serverId: string, tools: NhAssistantMockRemoteTool[]): void {\n this.admin.setRemoteTools(serverId, tools);\n }\n\n /**\n * The window the assistant components open for MCP authorizations; `provideNhAssistantMockApi`\n * provides it as `NH_ASSISTANT_MCP_AUTHORIZATION_WINDOW`.\n */\n readonly authorizationWindow = new NhAssistantMockAuthorizationWindow(flowId => this.admin.authorizeFlow(flowId));\n\n /** What the mock authorization window answers next: the person approves, denies or closes it. */\n setMcpAuthorizationOutcome(outcome: 'approve' | 'deny' | 'cancel'): void {\n this.admin.setMcpAuthorizationOutcome(outcome);\n }\n\n /**\n * Simulates an OAuth connection that ended outside the application: a refused refresh\n * (`reauthorization-required`) or another authorization server (`issuer-changed`).\n */\n setMcpConnectionStatus(serverId: string, status: 'reauthorization-required' | 'issuer-changed'): void {\n this.admin.setMcpConnectionStatus(serverId, status);\n }\n\n /**\n * Publishes or changes one version of a text asset of the application. A skill or agent that names\n * this version with another hash then reports `asset-changed`, as after the server's next load.\n */\n setInstructionAsset(asset: NhAssistantMockInstructionAsset): void {\n this.admin.instructionAssets.setAsset(asset);\n }\n\n /** Removes one version of a text asset; what names it reports `asset-missing`. */\n removeInstructionAsset(assetId: string, version: number): void {\n this.admin.instructionAssets.removeAsset(assetId, version);\n }\n\n /** The files people uploaded, oldest first, as the application's file source stored them. */\n get uploads(): readonly { conversationId: string; name: string; mediaType: string; size: number; reference: FileReference }[] {\n return this.files.uploads;\n }\n\n /**\n * An upload implementation (`NH_ASSISTANT_UPLOAD`) that answers `POST conversations/{id}/files` with\n * the server's checks, after reporting the progress in four steps.\n */\n readonly upload = async (request: NhAssistantUploadRequest): Promise<Response> => {\n const path = this.pathOf(request.url);\n const file = request.body.get('file');\n this.requests.push({\n method: 'POST',\n path: path ?? request.url,\n headers: { ...request.headers },\n body: file instanceof Blob ? { name: file instanceof File ? file.name : null, mediaType: file.type, size: file.size } : undefined\n });\n\n const total = file instanceof Blob ? file.size : 0;\n for (const share of [0.25, 0.5, 0.75, 1]) {\n if (request.signal.aborted) {\n throw new DOMException('The operation was aborted.', 'AbortError');\n }\n await delay(this.scenario.timing?.eventDelayMs ?? 40);\n request.onProgress(Math.round(total * share), total);\n }\n if (request.signal.aborted) {\n throw new DOMException('The operation was aborted.', 'AbortError');\n }\n\n const segments = path?.split('/').map(segment => decodeURIComponent(segment)) ?? [];\n if (!this.enabledState() || segments.length !== 3 || segments[0] !== 'conversations' || segments[2] !== 'files') {\n return this.empty(404);\n }\n const conversation = this.conversations.get(segments[1]);\n if (!conversation) {\n return this.error('assistant-conversation-not-found');\n }\n\n return this.result(await this.files.upload(\n conversation.id,\n this.offersFiles(),\n this.uploadsOf(conversation.agentId),\n request.headers,\n request.body));\n };\n\n /** A `fetch` implementation that answers the assistant endpoints below `apiBaseUrl`. */\n readonly fetch = async (input: string, init: RequestInit): Promise<Response> => {\n const method = (init.method ?? 'GET').toUpperCase();\n const url = new URL(input, 'http://mock.local');\n const path = this.pathOf(input);\n const body = typeof init.body === 'string' && init.body.length > 0 ? JSON.parse(init.body) : undefined;\n\n this.requests.push({ method, path: path ?? url.pathname, headers: { ...(init.headers as Record<string, string>) }, body });\n\n if (init.signal?.aborted) {\n throw new DOMException('The operation was aborted.', 'AbortError');\n }\n if (path === null) {\n return this.empty(404);\n }\n\n return this.route(method, path, url.searchParams, body, languageOf(init.headers));\n };\n\n private route(method: string, path: string, query: URLSearchParams, body: unknown, language: string | null = null): Response {\n const segments = path.split('/').map(segment => decodeURIComponent(segment));\n\n if (method === 'GET' && path === 'status') {\n const limits = { ...defaultLimits, ...this.scenario.limits };\n const collaboration = {\n directory: (this.scenario.collaboration?.directory?.length ?? 0) > 0,\n hubPath: NH_ASSISTANT_MOCK_HUB_PATH,\n push: false,\n maxParticipants: this.maxParticipants()\n };\n return this.json(200, this.enabledState()\n ? { enabled: true, agents: this.admin.chatAgents(), limits, canAdminister: this.admin.administers, collaboration }\n : { enabled: false, agents: [], limits, canAdminister: false });\n }\n if (!this.enabledState()) {\n return this.empty(404);\n }\n\n if (method === 'GET' && path === 'agents') {\n return this.json(200, this.admin.chatAgents());\n }\n if (path === 'preferences') {\n return this.result(this.admin.handlePreferences(method, body));\n }\n if (segments[0] === 'mcp-connections') {\n return this.result(this.admin.handleMcpConnections(method, segments, body));\n }\n if (path === 'notifications') {\n if (method === 'PUT') {\n this.pushEnabled = (body as { pushEnabled?: boolean } | undefined)?.pushEnabled === true;\n }\n return this.json(200, { pushEnabled: this.pushEnabled, pushAvailable: false, publicKey: null });\n }\n if (path === 'notifications/push-subscription') {\n return this.error('assistant-push-unavailable');\n }\n if (segments[0] === 'admin' && segments[1] === 'agents' && segments[3] === 'runs' && segments.length === 4) {\n return this.result(this.agentRuns.handleAgentRuns(method, segments[2], query, language));\n }\n if (segments[0] === 'admin') {\n // Agent packages have endpoints of their own; every other save runs under their locks, and\n // every read of the administration carries the links of the parts.\n const packaged = this.agentPackages.handle(method, segments, body);\n if (packaged) {\n return this.result(packaged);\n }\n const result = this.agentPackages.guard(method, segments, () => this.adminResult(method, segments, query, body, language));\n return this.result(this.agentPackages.decorate(method, segments, result));\n }\n if (segments[0] === 'boards') {\n return this.result(this.boards.handle(method, segments, query, language) ?? { status: 404 });\n }\n if (segments[0] === 'subjects') {\n return this.result(this.agentRuns.handleSubjects(method, segments, language)\n ?? this.subjects.handle(method, segments, query, language)\n ?? { status: 404 });\n }\n if (segments[0] === 'runs') {\n return this.result(this.agentRuns.handleRuns(method, segments, query, body, language) ?? { status: 404 });\n }\n if (segments[0] === 'threads') {\n return this.result(this.agentRuns.handleThreads(method, segments, query, body, language) ?? { status: 404 });\n }\n if (segments[0] === 'approvals') {\n return this.result(this.proposals.handle(method, segments, query, body) ?? { status: 404 });\n }\n if (segments[0] !== 'conversations') {\n return this.empty(404);\n }\n\n if (segments.length === 1) {\n if (method === 'GET') {\n return this.json(200, this.list(query));\n }\n if (method === 'POST') {\n return this.create(body as CreateConversationRequest);\n }\n return this.empty(405);\n }\n\n const conversation = this.conversations.get(segments[1]);\n if (!conversation) {\n return this.empty(404);\n }\n\n if (segments.length === 2) {\n if (method === 'GET') {\n return this.json(200, this.view(conversation));\n }\n if (method === 'DELETE') {\n this.conversations.delete(conversation.id);\n this.pendingApprovals.delete(conversation.id);\n this.pendingQuestions.delete(conversation.id);\n this.emitLive({ kind: 'removed', data: { conversationId: conversation.id } });\n return this.empty(204);\n }\n return this.empty(405);\n }\n\n if (method === 'POST' && segments.length === 3 && segments[2] === 'read') {\n return this.markRead(conversation, (body as { sequence?: number } | undefined)?.sequence);\n }\n if (segments.length === 3 && segments[2] === 'share-link') {\n if (method === 'POST') {\n const token = this.nextId().replace(/-/g, '');\n this.shareTokens.set(conversation.id, token);\n return this.json(200, { token });\n }\n if (method === 'DELETE') {\n this.shareTokens.delete(conversation.id);\n return this.empty(204);\n }\n }\n if (method === 'POST' && segments.length === 3 && segments[2] === 'join') {\n const token = (body as { token?: string } | undefined)?.token;\n return token && this.shareTokens.get(conversation.id) === token\n ? this.json(200, this.view(conversation))\n : this.error('assistant-share-link-invalid');\n }\n if (method === 'GET' && segments.length === 3 && segments[2] === 'participant-candidates') {\n return this.candidates(conversation, query.get('query') ?? '');\n }\n if (method === 'POST' && segments.length === 3 && segments[2] === 'participants') {\n return this.invite(conversation, (body as { actorId?: string } | undefined)?.actorId);\n }\n if (method === 'DELETE' && segments.length === 4 && segments[2] === 'participants') {\n const removed = this.removeMember(conversation.id, segments[3]);\n return removed ? this.empty(204) : this.error('assistant-participant-not-found');\n }\n\n if (method === 'POST' && segments.length === 3 && segments[2] === 'messages') {\n return this.sendMessage(conversation, body as SendMessageRequest);\n }\n if (method === 'POST' && segments.length === 3 && segments[2] === 'cancel') {\n return this.cancel(conversation);\n }\n if (method === 'POST' && segments.length === 5 && segments[2] === 'approvals' && segments[4] === 'decide') {\n return this.decide(conversation, segments[3], body as DecideApprovalRequest);\n }\n if (method === 'POST' && segments.length === 5 && segments[2] === 'approvals' && segments[4] === 'resolve') {\n return this.resolve(conversation, segments[3], body as ResolveApprovalRequest);\n }\n if (method === 'POST' && segments.length === 5 && segments[2] === 'questions' && segments[4] === 'answer') {\n return this.answer(conversation, segments[3], body as AnswerQuestionRequest);\n }\n\n return this.empty(404);\n }\n\n private list(query: URLSearchParams): { items: ConversationSummary[]; total: number } {\n const page = Math.max(1, Number(query.get('page') ?? 1));\n const itemsPerPage = Math.max(1, Number(query.get('itemsPerPage') ?? 20));\n const all = [...this.conversations.values()]\n .sort((left, right) => right.updatedAt.localeCompare(left.updatedAt))\n .map(conversation => this.summary(conversation));\n\n return { items: all.slice((page - 1) * itemsPerPage, page * itemsPerPage), total: all.length };\n }\n\n private create(request: CreateConversationRequest): Response {\n const agent = this.admin.chatAgents().find(item => item.id === request?.agentId);\n if (!agent) {\n return this.empty(400);\n }\n\n const now = new Date().toISOString();\n const conversation: Conversation = {\n id: this.nextId(),\n agentId: agent.id,\n agentVersion: agent.version,\n title: request.title ?? null,\n status: 'idle',\n createdAt: now,\n updatedAt: now,\n messages: [],\n pendingApproval: null\n };\n this.conversations.set(conversation.id, conversation);\n this.readPositions.set(conversation.id, 0);\n\n return this.json(201, this.view(conversation));\n }\n\n private sendMessage(conversation: Conversation, request: SendMessageRequest): Response {\n const text = request?.text?.trim() ?? '';\n const limit = this.scenario.limits?.maxMessageChars ?? defaultLimits.maxMessageChars;\n if (text.length === 0 || text.length > limit || !request.clientMessageId) {\n return this.empty(400);\n }\n // Like the server: the attachments are checked before the turn claims the conversation.\n const uploads = this.uploadsOf(conversation.agentId);\n const filesCode = this.files.checkMessage(request.files, this.offersFiles(), uploads?.maxFiles ?? 5);\n if (filesCode) {\n return this.error(filesCode);\n }\n if (!acceptsMessage(conversation.status)) {\n return this.empty(409);\n }\n\n // Like the server: an invalid page context is dropped, never a 400.\n const pageContext = normalizeNhAssistantClientContext(request.clientContext);\n this.pageContexts.set(conversation.id, pageContext);\n const turn = this.findTurn(text, conversation.agentId, pageContext);\n const userMessageId = this.nextId();\n const assistantMessageId = this.nextId();\n const files: FileReference[] = request.files ?? [];\n // The turn opens the attachments with the sender's rights; it ends with the first refusal and the\n // message keeps only what the model read.\n const refusal = files.length === 0 ? null : uploads ? this.files.openCode(conversation.id, files) : 'assistant-files-not-accepted';\n const parts: MessagePart[] = [\n { type: 'text', text },\n ...(refusal ? [] : files.map(file => ({ type: 'file' as const, name: file.name, mediaType: file.mediaType, size: file.size })))\n ];\n this.activeActors.set(conversation.id, this.currentUser.actorId);\n this.update(conversation.id, current => ({\n ...current,\n title: current.title ?? text.slice(0, 60),\n status: 'running',\n messages: [\n ...current.messages,\n { id: userMessageId, role: 'user', createdAt: new Date().toISOString(), parts, authorActorId: this.currentUser.actorId }\n ]\n }));\n // The sender has read their own message.\n this.readPositions.set(conversation.id, lastSequence(this.conversations.get(conversation.id)!));\n\n return this.stream(conversation.id, async emit => {\n await emit({ type: 'turn.started', data: { turnId: this.nextId(), userMessageId, assistantMessageId } });\n const steps: NhAssistantMockStep[] = refusal\n ? [{ error: { code: refusal, messageKey: `nh-assistant.errors.${refusal}` } }]\n : turn?.steps ?? [];\n await this.playSteps(conversation.id, assistantMessageId, steps, emit);\n });\n }\n\n /**\n * `POST conversations/{id}/approvals/{approvalId}/decide`: approves or rejects the approval the\n * turn waits for, or leaves a consulted agent's proposal with a `leaveRoute` for the subject's\n * approvers (`leave`). Leaving closes it here, names the proposal that now waits at the subject\n * (`consultation.movedToApprovalId`) and resumes the turn with the step's `left` steps.\n */\n private decide(conversation: Conversation, approvalId: string, request: DecideApprovalRequest): Response {\n const pending = this.pendingApprovals.get(conversation.id);\n if (!pending || pending.approval.approvalId !== approvalId) {\n return this.empty(404);\n }\n const decider = this.activeActors.get(conversation.id);\n if (decider && decider !== this.currentUser.actorId) {\n return this.error('assistant-approval-forbidden');\n }\n const decision = request?.decision;\n if (decision !== 'approve' && decision !== 'reject' && decision !== 'leave') {\n return this.error('assistant-approval-decision-invalid');\n }\n if (decision === 'leave' && !pending.approval.consultation) {\n return this.error('assistant-approval-decision-invalid');\n }\n if (decision === 'leave' && !pending.approval.consultation?.leaveRoute) {\n return this.error('assistant-consult-proposal-refused');\n }\n if (request.expectedProposalHash !== pending.approval.proposalHash) {\n return this.empty(409);\n }\n if (Date.parse(pending.approval.expiresAt) <= Date.now()) {\n return this.empty(409);\n }\n\n this.pendingApprovals.delete(conversation.id);\n const lastUser = [...conversation.messages].reverse().find(message => message.role === 'user');\n this.update(conversation.id, current => applyNhAssistantApprovalDecision(current, approvalId, decision));\n if (decision === 'leave') {\n const movedToApprovalId = this.nextId();\n this.update(conversation.id, current => withMovedApproval(current, approvalId, movedToApprovalId));\n }\n\n return this.stream(conversation.id, async emit => {\n await emit({\n type: 'turn.started',\n data: { turnId: this.nextId(), userMessageId: lastUser?.id ?? pending.assistantMessageId, assistantMessageId: pending.assistantMessageId }\n });\n\n if (decision === 'approve') {\n await emit({\n type: 'tool.completed',\n data: { invocationId: pending.invocationId, status: 'succeeded', resultCode: null, resultPreview: pending.step.resultPreview ?? null }\n });\n await this.playSteps(conversation.id, pending.assistantMessageId, pending.step.approved, emit);\n } else if (decision === 'leave') {\n // The consult call ends: its proposal now waits for the subject's approvers.\n await emit({\n type: 'tool.completed',\n data: { invocationId: pending.invocationId, status: 'succeeded', resultCode: 'assistant-consult-proposal-moved', resultPreview: null }\n });\n await this.playSteps(conversation.id, pending.assistantMessageId, pending.step.left ?? [], emit);\n } else {\n await this.playSteps(conversation.id, pending.assistantMessageId, pending.step.rejected, emit);\n }\n });\n }\n\n /**\n * `POST conversations/{id}/approvals/{approvalId}/resolve`: the person who approved a proposal in this\n * chat resolves its uncertain hand-off (`canResolve`), as the server does: `hand-to-application` hands\n * it to the application again with a new report deadline, `mark-resolved` confirms it. Another action\n * is refused, as are an approval in another status and one the caller may not resolve. Returns the\n * conversation.\n */\n private resolve(conversation: Conversation, approvalId: string, request: ResolveApprovalRequest): Response {\n const part = conversation.messages\n .flatMap(message => message.parts)\n .find((item): item is ApprovalPart => item.type === 'approval' && item.approvalId === approvalId);\n if (!part) {\n return this.error('assistant-approval-not-found');\n }\n const action = request?.action;\n if (action !== 'hand-to-application' && action !== 'mark-resolved') {\n return this.error('assistant-approval-decision-invalid');\n }\n if (part.status !== 'execution-unknown') {\n return this.error('assistant-execution-not-uncertain');\n }\n if (part.canResolve !== true) {\n return this.error('assistant-approval-forbidden');\n }\n\n const reportDueAt = new Date(Date.now() + mockReportWithinMs).toISOString();\n this.update(conversation.id, current => withResolvedApproval(current, approvalId, action, reportDueAt));\n return this.json(200, this.view(this.conversations.get(conversation.id) ?? conversation));\n }\n\n /**\n * `POST conversations/{id}/questions/{questionId}/answer`: the addressee answers the question the\n * turn waits for with the index of a choice, as on the server. Anyone else is refused, as are a\n * choice the question does not offer and a question whose wait ended, which releases the\n * conversation. The answer resumes the turn with the step's answered steps.\n */\n private answer(conversation: Conversation, questionId: string, request: AnswerQuestionRequest): Response {\n const pending = this.pendingQuestions.get(conversation.id);\n const known = conversation.messages.some(message =>\n message.parts.some(part => part.type === 'question' && part.questionId === questionId));\n if (!known) {\n return this.error('assistant-question-not-found');\n }\n if (pending?.question.questionId === questionId && pending.question.addresseeActorId !== this.currentUser.actorId) {\n return this.error('assistant-question-forbidden');\n }\n if (!pending || pending.question.questionId !== questionId) {\n return this.error('assistant-question-not-pending');\n }\n const choice = request?.choice;\n if (typeof choice !== 'number' || !Number.isInteger(choice) || choice < 0 || choice >= pending.question.choices.length) {\n return this.error('assistant-question-answer-invalid');\n }\n if (Date.parse(pending.question.expiresAt) <= Date.now()) {\n this.pendingQuestions.delete(conversation.id);\n this.update(conversation.id, current => withClosedQuestion(current, questionId, 'expired'));\n return this.error('assistant-question-expired');\n }\n\n this.pendingQuestions.delete(conversation.id);\n this.activeActors.set(conversation.id, this.currentUser.actorId);\n const lastUser = [...conversation.messages].reverse().find(message => message.role === 'user');\n this.update(conversation.id, current => applyNhAssistantQuestionAnswer(current, questionId, choice));\n const answer = pending.question.choices[choice];\n const steps = typeof pending.step.answered === 'function' ? pending.step.answered(answer, choice) : pending.step.answered;\n const assistantMessageId = this.nextId();\n\n return this.stream(conversation.id, async emit => {\n await emit({ type: 'turn.started', data: { turnId: this.nextId(), userMessageId: lastUser?.id ?? questionId, assistantMessageId } });\n await emit({\n type: 'tool.completed',\n data: { invocationId: questionId, status: 'succeeded', resultCode: null, resultPreview: JSON.stringify({ answer }) }\n });\n await emit({\n type: 'question.answered',\n data: { ...pending.question, status: 'answered', answerIndex: choice, closedAt: new Date().toISOString() }\n });\n await this.playSteps(conversation.id, assistantMessageId, steps, emit);\n });\n }\n\n private cancel(conversation: Conversation): Response {\n const run = this.runs.get(conversation.id);\n if (run) {\n run.cancelled = true;\n return this.empty(202);\n }\n\n const question = this.pendingQuestions.get(conversation.id);\n if (question) {\n this.pendingQuestions.delete(conversation.id);\n this.update(conversation.id, current => withClosedQuestion(current, question.question.questionId, 'cancelled'));\n }\n\n const pending = this.pendingApprovals.get(conversation.id);\n if (pending) {\n this.pendingApprovals.delete(conversation.id);\n this.update(conversation.id, current => ({\n ...applyNhAssistantApprovalDecision(current, pending.approval.approvalId, 'reject'),\n status: 'idle'\n }));\n }\n\n return this.empty(202);\n }\n\n private async playSteps(conversationId: string, assistantMessageId: string, steps: NhAssistantMockStep[], emit: Emit): Promise<void> {\n const usage: TurnUsage = { inputTokens: 180, outputTokens: 0, toolCalls: 0 };\n const complete = (status: 'completed' | 'failed', errorCode: string | null = null) =>\n emit({ type: 'turn.completed', data: { turnId: this.nextId(), status, usage, errorCode } });\n\n for (const step of steps) {\n if ('text' in step) {\n const text = typeof step.text === 'function' ? step.text(this.pageContexts.get(conversationId) ?? null) : step.text;\n for (const piece of text.match(/\\S+\\s*|\\s+/g) ?? []) {\n usage.outputTokens++;\n await emit({ type: 'message.delta', data: { messageId: assistantMessageId, text: piece } });\n }\n } else if ('tool' in step) {\n const invocationId = this.nextId();\n usage.toolCalls++;\n await emit({\n type: 'tool.started',\n data: {\n invocationId,\n toolId: step.tool.toolId,\n toolVersion: step.tool.toolVersion ?? 1,\n displayName: step.tool.displayName,\n argumentsPreview: step.tool.argumentsPreview ?? null\n }\n });\n await emit({\n type: 'tool.completed',\n data: {\n invocationId,\n status: step.tool.status ?? 'succeeded',\n resultCode: step.tool.resultCode ?? null,\n resultPreview: step.tool.resultPreview ?? null\n }\n });\n } else if ('approval' in step) {\n await this.pauseForApproval(conversationId, assistantMessageId, step.approval, emit);\n usage.toolCalls++;\n await emit({ type: 'turn.completed', data: { turnId: this.nextId(), status: 'waiting-for-approval', usage, errorCode: null } });\n return;\n } else if ('question' in step) {\n await this.pauseForQuestion(conversationId, step.question, emit);\n usage.toolCalls++;\n await emit({ type: 'turn.completed', data: { turnId: this.nextId(), status: 'waiting-for-approval', usage, errorCode: null } });\n return;\n } else if ('error' in step) {\n await emit({ type: 'error', data: step.error });\n // The mock keeps the conversation usable after a failed turn.\n this.update(conversationId, current => ({ ...current, status: 'idle' }));\n return;\n } else if ('fail' in step) {\n await complete('failed', step.fail.errorCode);\n return;\n } else if ('connectionRequired' in step) {\n const needed = this.admin.connectionNeeded(step.connectionRequired.serverId);\n if (!needed) {\n continue;\n }\n await emit({ type: 'connection.required', data: { serverId: step.connectionRequired.serverId, ...needed } });\n for (const piece of step.connectionRequired.text?.match(/\\S+\\s*|\\s+/g) ?? []) {\n usage.outputTokens++;\n await emit({ type: 'message.delta', data: { messageId: assistantMessageId, text: piece } });\n }\n break;\n }\n }\n\n await complete('completed');\n }\n\n private async pauseForApproval(\n conversationId: string,\n assistantMessageId: string,\n step: NhAssistantMockApprovalStep['approval'],\n emit: Emit\n ): Promise<void> {\n const invocationId = this.nextId();\n await emit({\n type: 'tool.started',\n data: {\n invocationId,\n toolId: step.toolId,\n toolVersion: step.toolVersion ?? 1,\n displayName: step.displayName,\n argumentsPreview: step.argumentsPreview\n }\n });\n\n const approval: ApprovalPart = {\n type: 'approval',\n approvalId: this.nextId(),\n proposalId: this.nextId(),\n proposalHash: `sha256:${this.nextId().replace(/-/g, '')}`,\n toolId: step.toolId,\n summary: step.summary,\n presentation: step.presentation,\n argumentsPreview: step.argumentsPreview,\n targets: step.targets,\n expiresAt: new Date(Date.now() + (step.expiresInSeconds ?? 300) * 1000).toISOString(),\n status: 'pending',\n ...(step.consultation\n ? {\n consultation: {\n consultationId: step.consultation.consultationId ?? this.nextId(),\n agentId: step.consultation.agentId,\n subjectType: step.consultation.subjectType,\n subjectId: step.consultation.subjectId,\n subjectDisplayName: step.consultation.subjectDisplayName ?? null,\n leaveRoute: step.consultation.leaveRoute ?? null,\n answer: step.consultation.answer ?? null,\n movedToApprovalId: null\n }\n }\n : {})\n };\n this.pendingApprovals.set(conversationId, { approval, invocationId, assistantMessageId, step });\n await emit({ type: 'approval.required', data: approval });\n }\n\n /** Records the `ask_question` call and posts the question; the turn then waits for its answer. */\n private async pauseForQuestion(\n conversationId: string,\n step: NhAssistantMockQuestionStep['question'],\n emit: Emit\n ): Promise<void> {\n const questionId = this.nextId();\n await emit({\n type: 'tool.started',\n data: {\n invocationId: questionId,\n toolId: askQuestionToolId,\n toolVersion: 1,\n displayName: 'ask_question',\n argumentsPreview: JSON.stringify({ question: step.question, choices: step.choices })\n }\n });\n\n const question: QuestionPart = {\n type: 'question',\n questionId,\n question: step.question,\n choices: [...step.choices],\n addresseeActorId: step.addresseeActorId ?? this.activeActors.get(conversationId) ?? this.currentUser.actorId,\n expiresAt: new Date(Date.now() + (step.expiresInSeconds ?? 900) * 1000).toISOString(),\n status: 'pending'\n };\n this.pendingQuestions.set(conversationId, { question, step });\n await emit({ type: 'question.asked', data: question });\n }\n\n private stream(conversationId: string, play: (emit: Emit) => Promise<void>): Response {\n const timing = this.scenario.timing ?? {};\n const firstDelay = timing.firstEventDelayMs ?? 200;\n const eventDelay = timing.eventDelayMs ?? 40;\n const chunkSize = Math.max(1, timing.chunkSize ?? 23);\n const encoder = new TextEncoder();\n const run: ActiveRun = { cancelled: false, aborted: false };\n this.runs.set(conversationId, run);\n\n let first = true;\n let eventCount = 0;\n\n return new Response(new ReadableStream<Uint8Array>({\n start: controller => {\n const write = (text: string) => {\n const bytes = encoder.encode(text);\n for (let offset = 0; offset < bytes.length; offset += chunkSize) {\n controller.enqueue(bytes.slice(offset, offset + chunkSize));\n }\n };\n\n const emit: Emit = async event => {\n await delay(first ? firstDelay : eventDelay);\n first = false;\n if (run.aborted) {\n throw new RunStopped();\n }\n if (run.cancelled && event.type !== 'turn.started') {\n throw new RunStopped();\n }\n\n this.update(conversationId, current => applyNhAssistantEvent(current, event));\n if (eventCount++ % 5 === 2) {\n write(': keep-alive\\n\\n');\n }\n write(`event: ${event.type}\\ndata: ${JSON.stringify(event.data)}\\n\\n`);\n };\n\n void play(emit)\n .catch(async error => {\n if (!(error instanceof RunStopped) || run.aborted) {\n return;\n }\n\n const usage = { inputTokens: 180, outputTokens: 0, toolCalls: 0 };\n const cancelled: NhAssistantSseEvent = { type: 'turn.completed', data: { turnId: this.nextId(), status: 'cancelled', usage, errorCode: null } };\n this.update(conversationId, current => applyNhAssistantEvent(current, cancelled));\n write(`event: ${cancelled.type}\\ndata: ${JSON.stringify(cancelled.data)}\\n\\n`);\n })\n .finally(() => {\n if (this.runs.get(conversationId) === run) {\n this.runs.delete(conversationId);\n }\n if (!run.aborted) {\n controller.close();\n }\n });\n },\n cancel: () => {\n run.aborted = true;\n }\n }), { status: 200, headers: { 'content-type': 'text/event-stream; charset=utf-8', 'cache-control': 'no-cache' } });\n }\n\n private findTurn(text: string, agentId: string, pageContext: ClientContext | null): NhAssistantMockTurn | undefined {\n return this.scenario.turns.find(turn => {\n const match = turn.match;\n if (match === undefined) {\n return true;\n }\n if (typeof match === 'string') {\n return text.toLowerCase().includes(match.toLowerCase());\n }\n if (match instanceof RegExp) {\n return match.test(text);\n }\n return match(text, agentId, pageContext);\n });\n }\n\n private update(conversationId: string, change: (conversation: Conversation) => Conversation): void {\n const conversation = this.conversations.get(conversationId);\n if (!conversation) {\n return;\n }\n const updated = withSequences({ ...change(conversation), updatedAt: new Date().toISOString() });\n if (updated.status !== 'running' && updated.status !== 'waiting-for-approval') {\n this.activeActors.delete(conversationId);\n }\n this.conversations.set(conversationId, updated);\n if (updated.status !== conversation.status || updated.title !== conversation.title) {\n this.emitChanged(conversationId);\n }\n }\n\n /** The conversation as the signed-in user sees it. */\n private view(conversation: Conversation): Conversation {\n const members = this.members.get(conversation.id) ?? [];\n return {\n ...conversation,\n ...this.summary(conversation),\n members,\n shareToken: this.shareTokens.get(conversation.id) ?? null,\n currentActorId: this.currentUser.actorId\n };\n }\n\n private summary(conversation: Conversation): ConversationSummary {\n const latest = lastSequence(conversation);\n const members = this.members.get(conversation.id) ?? [];\n return {\n id: conversation.id,\n agentId: conversation.agentId,\n title: conversation.title,\n status: conversation.status,\n createdAt: conversation.createdAt,\n updatedAt: conversation.updatedAt,\n role: 'owner',\n participantCount: Math.max(0, members.length - 1),\n lastMessageSequence: latest,\n lastReadSequence: Math.min(this.readPositions.get(conversation.id) ?? latest, latest),\n activeActorId: this.activeActors.get(conversation.id) ?? null\n };\n }\n\n private markRead(conversation: Conversation, sequence: number | undefined): Response {\n const latest = lastSequence(conversation);\n const target = Math.min(sequence ?? latest, latest);\n if (target > (this.readPositions.get(conversation.id) ?? 0)) {\n this.readPositions.set(conversation.id, target);\n this.emitLive({ kind: 'read', data: { conversationId: conversation.id, lastReadSequence: target } });\n }\n return this.empty(204);\n }\n\n private candidates(conversation: Conversation, query: string): Response {\n const directory = this.scenario.collaboration?.directory ?? [];\n if (directory.length === 0) {\n return this.error('assistant-directory-unavailable');\n }\n const text = query.trim().toLowerCase();\n if (text.length < 2) {\n return this.error('assistant-validation');\n }\n const members = new Set((this.members.get(conversation.id) ?? []).map(member => member.actorId));\n return this.json(200, directory\n .filter(person => person.actorId !== this.currentUser.actorId && !members.has(person.actorId))\n .filter(person => person.displayName.toLowerCase().includes(text))\n .map(person => ({ actorId: person.actorId, displayName: person.displayName, detail: person.detail ?? null })));\n }\n\n private invite(conversation: Conversation, actorId: string | undefined): Response {\n const person = (this.scenario.collaboration?.directory ?? []).find(item => item.actorId === actorId);\n if (!person) {\n return this.error('assistant-participant-not-found');\n }\n const participants = (this.members.get(conversation.id) ?? []).filter(member => member.role === 'participant');\n if (participants.length >= this.maxParticipants()) {\n return this.error('assistant-participant-limit-reached');\n }\n this.addMember(conversation.id, person, 'participant');\n return this.empty(204);\n }\n\n private addMember(conversationId: string, person: NhAssistantMockPerson, role: ConversationMember['role']): void {\n const members = this.members.get(conversationId) ?? [];\n if (members.some(member => member.actorId === person.actorId)) {\n return;\n }\n const joinedAt = new Date().toISOString();\n const owner: ConversationMember[] = members.length === 0\n ? [{ actorId: this.currentUser.actorId, displayName: this.currentUser.displayName, role: 'owner', joinedAt }]\n : [];\n this.members.set(conversationId, [...members, ...owner, { actorId: person.actorId, displayName: person.displayName, role, joinedAt }]);\n this.emitChanged(conversationId);\n }\n\n private removeMember(conversationId: string, actorId: string): boolean {\n const members = this.members.get(conversationId) ?? [];\n if (!members.some(member => member.actorId === actorId && member.role === 'participant')) {\n return false;\n }\n const remaining = members.filter(member => member.actorId !== actorId);\n this.members.set(conversationId, remaining.length > 1 ? remaining : []);\n this.emitChanged(conversationId);\n return true;\n }\n\n private emitChanged(conversationId: string): void {\n const conversation = this.conversations.get(conversationId);\n if (!conversation) {\n return;\n }\n const summary = this.summary(conversation);\n this.emitLive({\n kind: 'changed',\n data: {\n conversationId,\n status: summary.status,\n title: summary.title,\n updatedAt: summary.updatedAt,\n activeActorId: summary.activeActorId ?? null,\n lastMessageSequence: summary.lastMessageSequence ?? 0,\n participantCount: summary.participantCount ?? 0\n }\n });\n }\n\n /**\n * Announces that the work of an agent changed, as the server does after its runs and proposals:\n * the work of an object reaches the caller, the work of the whole application only when the caller\n * passes the agent's view policy, by default its required policy, and only while a screen watches it\n * (`NhAssistantMockLiveService.watchAgentWork`). The mock runs no agents on its own; call it to show a\n * screen what a run in the background would change. Runs by hand and decisions announce themselves.\n */\n publishAgentWork(change: LiveAgentWorkChanged, agentId: string): void {\n const wholeApplication = change.subjectType === 'nh-system';\n if (wholeApplication && !this.readsApplicationWork(agentId)) {\n return;\n }\n\n this.emitLive({ kind: 'agent-work', data: change, wholeApplication });\n }\n\n private emitLive(message: NhAssistantMockLiveMessage): void {\n // Delivered after the current request, as a hub message would arrive.\n queueMicrotask(() => this.liveSubject.next(message));\n }\n\n private maxParticipants(): number {\n return this.scenario.collaboration?.maxParticipants ?? 20;\n }\n\n /** A contract error with the one status the server gives its code. */\n private error(code: string): Response {\n return this.result(mockFailure(code));\n }\n\n /** The path below `apiBaseUrl`, or `null` for another URL. */\n private pathOf(input: string): string | null {\n const url = new URL(input, 'http://mock.local');\n const base = new URL(this.config.apiBaseUrl.replace(/\\/+$/, ''), 'http://mock.local').pathname;\n return url.pathname.startsWith(`${base}/`) ? url.pathname.slice(base.length + 1) : null;\n }\n\n /** Whether the application keeps files for the assistant: an agent of the scenario takes uploads. */\n private offersFiles(): boolean {\n return this.scenario.agents.some(agent => !!agent.uploads);\n }\n\n /** What people may attach to a message to the agent, as its summary says. */\n private uploadsOf(agentId: string): AgentUploads | null {\n return this.admin.chatAgents().find(agent => agent.id === agentId)?.uploads\n ?? this.scenario.agents.find(agent => agent.id === agentId)?.uploads\n ?? null;\n }\n\n /**\n * Whether the caller decides the agent's proposals of the whole application: an approver of the whole\n * application (an administrator in the mock) who passes the agent's view policy, by default its\n * required policy.\n */\n /** Whether the caller passes the agent's view policy, by default its required policy. */\n private readsApplicationWork(agentId: string): boolean {\n const agent = this.admin.allAgents().find(item => item.id === agentId);\n const policy = agent?.viewPolicy ?? agent?.requiredPolicy ?? null;\n return policy === null || (this.scenario.callerPolicies?.includes(policy) ?? true);\n }\n\n private decidesForApplication(agentId: string): boolean {\n if (!this.admin.administers) {\n return false;\n }\n const agent = this.admin.allAgents().find(item => item.id === agentId);\n const policy = agent?.viewPolicy ?? agent?.requiredPolicy ?? null;\n return policy === null || (this.scenario.callerPolicies?.includes(policy) ?? true);\n }\n\n /**\n * The scenario's consultations of a thread's agent, newest first, each with the proposals of the\n * scenario that name it, counted per route; `null` when the scenario lists none there.\n */\n private consultationsOf(conversationId: string): AgentConsultationList | null {\n const listed = (this.scenario.consultations ?? []).filter(item => item.conversationId === conversationId);\n if (listed.length === 0) {\n return null;\n }\n\n const items = listed\n .map(item => {\n const proposals = this.proposals.consultationCounts(item.id);\n const createdAt = item.createdAt ?? consultationStart;\n const status = item.status ?? 'completed';\n return {\n id: item.id,\n askerActorId: item.askerActorId,\n askerDisplayName: item.askerDisplayName ?? null,\n askingAgentId: item.askingAgentId ?? null,\n depth: 1,\n status,\n failureCode: status === 'failed' ? 'assistant-consult-failed' : null,\n toolCalls: 0,\n inputTokens: 0,\n outputTokens: 0,\n proposalCount: proposals.total,\n createdAt,\n endedAt: status === 'running' ? null : createdAt,\n proposalsByRoute: proposals.byRoute\n };\n })\n .sort((left, right) => right.createdAt.localeCompare(left.createdAt));\n return { items, total: items.length };\n }\n\n private nextId(): string {\n this.sequence++;\n const suffix = this.sequence.toString(16).padStart(12, '0');\n return `00000000-0000-4000-8000-${suffix}`;\n }\n\n /**\n * The answer of an administration endpoint (`admin/...`) as its area gives it, with the groups of\n * agents and the run catalog in the request's language, without the package locks and links.\n */\n private adminResult(method: string, segments: string[], query: URLSearchParams, body: unknown, language: string | null): NhAssistantMockResult {\n if (segments[1] === 'agents' && segments[3] === 'groups' && segments.length === 4) {\n return this.boards.handleAdminGroups(method, segments[2], body);\n }\n if (segments[1] === 'agents' && segments[3] === 'metadata' && segments.length <= 5) {\n return this.agentMetadata.handle(method, segments[2], segments[4], query, body);\n }\n\n const result = this.admin.handleAdmin(method, segments, body, query);\n if (method === 'DELETE' && segments[1] === 'agents' && segments.length === 3 && result.status === 204) {\n this.boards.forget(segments[2]);\n this.agentMetadata.forget(segments[2]);\n this.agentPackages.forget(segments[2]);\n }\n // The run catalog lists the subject types and the groups in the request's language, as the\n // server does; agents carry their groups.\n if (method === 'GET' && segments.length === 2 && segments[1] === 'run-catalog' && result.status === 200) {\n return {\n ...result,\n body: {\n ...(result.body as object),\n subjectTypes: this.subjects.catalog(language),\n agentGroups: this.boards.catalog(language),\n agentMetadata: this.agentMetadata.catalog()\n }\n };\n }\n return segments[1] === 'agents' && result.status >= 200 && result.status < 300 ? this.withGroups(result) : result;\n }\n\n /** An administration request of the agent packages, as `adminResult` answers it, for a path with its query. */\n private adminCall(method: string, path: string, body?: unknown): NhAssistantMockResult {\n const url = new URL(path, 'http://mock.local/');\n const segments = url.pathname.slice(1).split('/').map(segment => decodeURIComponent(segment));\n return this.adminResult(method, segments, url.searchParams, body, null);\n }\n\n /** An administration answer about agents with each agent's groups, as the server answers it. */\n private withGroups(result: { status: number; body?: unknown }): { status: number; body?: unknown } {\n const enrich = (item: unknown): unknown => {\n const agent = item as { id?: unknown; source?: unknown } | null;\n return agent && typeof agent.id === 'string' && typeof agent.source === 'string'\n ? { ...agent, ...this.groupsOf(agent.id) }\n : item;\n };\n return Array.isArray(result.body) ? { ...result, body: result.body.map(enrich) } : { ...result, body: enrich(result.body) };\n }\n\n private groupsOf(agentId: string): { groups: string[]; codeGroups: string[] } {\n const membership = this.boards.membership(agentId);\n return { groups: membership.groups, codeGroups: membership.codeGroups };\n }\n\n private result(result: NhAssistantMockResult): Response {\n if (result.text !== undefined) {\n return new Response(result.text, { status: result.status, headers: { 'content-type': 'application/json', ...result.headers } });\n }\n return result.body === undefined ? this.empty(result.status) : this.json(result.status, result.body);\n }\n\n private json(status: number, value: unknown): Response {\n return new Response(JSON.stringify(value), { status, headers: { 'content-type': 'application/json' } });\n }\n\n private empty(status: number): Response {\n return new Response(null, { status });\n }\n}\n\nfunction languageOf(headers: RequestInit['headers']): string | null {\n const values = new Headers(headers ?? {});\n return values.get('Accept-Language');\n}\n\nfunction delay(milliseconds: number): Promise<void> {\n return new Promise(resolve => setTimeout(resolve, milliseconds));\n}\n\n/**\n * A consulted agent's proposal the person left for the subject's approvers, as the server reads it\n * afterwards: closed here and naming the proposal that waits at the subject.\n */\nfunction withMovedApproval(conversation: Conversation, approvalId: string, movedToApprovalId: string): Conversation {\n const moved = (part: MessagePart): MessagePart =>\n part.type === 'approval' && part.approvalId === approvalId && part.consultation\n ? { ...part, status: 'rejected', consultation: { ...part.consultation, leaveRoute: null, movedToApprovalId } }\n : part;\n return {\n ...conversation,\n messages: conversation.messages.map(message => ({ ...message, parts: message.parts.map(moved) }))\n };\n}\n\n/** How long the mock's application may take to report after a hand-off. */\nconst mockReportWithinMs = 4 * 60 * 60 * 1000;\n\n/**\n * The approval after its uncertain hand-off was resolved: handed to the application again, waiting for\n * its report until `reportDueAt`, or resolved. Either way nobody resolves it again.\n */\nfunction withResolvedApproval(\n conversation: Conversation,\n approvalId: string,\n action: 'hand-to-application' | 'mark-resolved',\n reportDueAt: string\n): Conversation {\n const resolved = (part: MessagePart): MessagePart => {\n if (part.type !== 'approval' || part.approvalId !== approvalId) {\n return part;\n }\n\n const { canResolve: _resolved, ...rest } = part;\n return action === 'hand-to-application'\n ? { ...rest, status: 'awaiting-application', executionResultCode: 'hand-off-acknowledged', executionReportDueAt: reportDueAt }\n : { ...rest, status: 'resolved', executionResultCode: 'resolved-by-approver' };\n };\n return {\n ...conversation,\n messages: conversation.messages.map(message => ({ ...message, parts: message.parts.map(resolved) }))\n };\n}\n\n/**\n * A question that closed without an answer, as the server reads it afterwards: expired or withdrawn\n * with its stopped turn. Its call ends, and the conversation takes the next message.\n */\nfunction withClosedQuestion(conversation: Conversation, questionId: string, status: 'expired' | 'cancelled'): Conversation {\n const closedAt = new Date().toISOString();\n const closed = (part: MessagePart): MessagePart => {\n if (part.type === 'question' && part.questionId === questionId) {\n return { ...part, status, closedAt };\n }\n if (part.type === 'tool-call' && part.invocationId === questionId) {\n return status === 'expired'\n ? { ...part, status: 'failed', resultCode: 'assistant-question-expired' }\n : { ...part, status: 'not-executed', resultCode: 'assistant-question-cancelled' };\n }\n return part;\n };\n return {\n ...conversation,\n status: 'idle',\n pendingQuestion: null,\n messages: conversation.messages.map(message => ({ ...message, parts: message.parts.map(closed) }))\n };\n}\n\n/** Like the server: a new message starts in an idle conversation or after a failed turn. */\nfunction acceptsMessage(status: Conversation['status']): boolean {\n return status === 'idle' || status === 'failed';\n}\n\n/** Numbers messages in order, as the server does, keeping numbers that are already set. */\nfunction withSequences(conversation: Conversation): Conversation {\n let next = lastSequence(conversation);\n if (conversation.messages.every(message => message.sequence !== undefined)) {\n return conversation;\n }\n return {\n ...conversation,\n messages: conversation.messages.map(message => message.sequence === undefined ? { ...message, sequence: ++next } : message)\n };\n}\n\nfunction lastSequence(conversation: Conversation): number {\n return conversation.messages.reduce((maximum, message) => Math.max(maximum, message.sequence ?? 0), 0);\n}\n","import { DestroyRef, Injectable, computed, inject, signal } from '@angular/core';\nimport {\n LiveAgentWorkChanged,\n LiveConversationChanged,\n LiveConversationEvent,\n LiveConversationRead,\n LiveConversationRemoved,\n NhAssistantLiveService,\n NhAssistantLiveState\n} from '@newheap/platform-ai-chat';\nimport { Observable, Subject, Subscription } from 'rxjs';\nimport { NhAssistantMockBackend } from './nh-assistant-mock-backend';\n\ntype NhAssistantLiveSurface = Pick<\n NhAssistantLiveService,\n 'changed$' | 'read$' | 'removed$' | 'events$' | 'agentWork$' | 'resync$' | 'state' | 'connect' | 'stop' | 'watchAgentWork'\n>;\n\n/**\n * Stands in for the SignalR live service: it delivers the mock back-end's live updates in\n * memory, so shared conversations, other tabs and parallel turns behave as with a real hub. The work\n * of agents for the whole application arrives only while a screen watches it, as on the hub.\n */\n@Injectable()\nexport class NhAssistantMockLiveService implements NhAssistantLiveSurface {\n private readonly backend = inject(NhAssistantMockBackend);\n private readonly changedSubject = new Subject<LiveConversationChanged>();\n private readonly readSubject = new Subject<LiveConversationRead>();\n private readonly removedSubject = new Subject<LiveConversationRemoved>();\n private readonly eventSubject = new Subject<LiveConversationEvent>();\n private readonly agentWorkSubject = new Subject<LiveAgentWorkChanged>();\n private readonly resyncSubject = new Subject<void>();\n private readonly watchers = signal(0);\n private readonly stateSignal = signal<NhAssistantLiveState>('off');\n private subscription?: Subscription;\n\n readonly changed$: Observable<LiveConversationChanged> = this.changedSubject.asObservable();\n readonly read$: Observable<LiveConversationRead> = this.readSubject.asObservable();\n readonly removed$: Observable<LiveConversationRemoved> = this.removedSubject.asObservable();\n readonly events$: Observable<LiveConversationEvent> = this.eventSubject.asObservable();\n /** The work of agents that changed: runs by hand, decisions and `NhAssistantMockBackend.publishAgentWork`. */\n readonly agentWork$: Observable<LiveAgentWorkChanged> = this.agentWorkSubject.asObservable();\n /** Whether a screen watches the work of agents for the whole application. */\n readonly watching = computed(() => this.watchers() > 0);\n readonly resync$: Observable<void> = this.resyncSubject.asObservable();\n readonly state = this.stateSignal.asReadonly();\n\n constructor() {\n inject(DestroyRef).onDestroy(() => this.subscription?.unsubscribe());\n }\n\n async connect(hubPath: string | null): Promise<void> {\n await this.stop();\n if (!hubPath) {\n return;\n }\n this.subscription = this.backend.live$.subscribe(message => {\n switch (message.kind) {\n case 'changed':\n this.changedSubject.next(message.data);\n break;\n case 'read':\n this.readSubject.next(message.data);\n break;\n case 'removed':\n this.removedSubject.next(message.data);\n break;\n case 'event':\n this.eventSubject.next(message.data);\n break;\n case 'agent-work':\n if (!message.wholeApplication || this.watchers() > 0) {\n this.agentWorkSubject.next(message.data);\n }\n break;\n }\n });\n this.stateSignal.set('connected');\n this.resyncSubject.next();\n }\n\n /** Follows the work of agents for the whole application until the returned function is called. */\n watchAgentWork(): () => void {\n this.watchers.update(count => count + 1);\n let released = false;\n return () => {\n if (!released) {\n released = true;\n this.watchers.update(count => Math.max(0, count - 1));\n }\n };\n }\n\n async stop(): Promise<void> {\n this.subscription?.unsubscribe();\n this.subscription = undefined;\n this.stateSignal.set('off');\n }\n}\n","import { EnvironmentProviders, inject, makeEnvironmentProviders } from '@angular/core';\nimport {\n NH_ASSISTANT_FETCH,\n NH_ASSISTANT_MCP_AUTHORIZATION_WINDOW,\n NH_ASSISTANT_UPLOAD,\n NhAssistantLiveService\n} from '@newheap/platform-ai-chat';\nimport { NH_ASSISTANT_MOCK_SCENARIO, NhAssistantMockBackend } from './nh-assistant-mock-backend';\nimport { NhAssistantMockLiveService } from './nh-assistant-mock-live';\nimport { NhAssistantMockScenario } from './nh-assistant-mock.models';\n\n/**\n * Replaces the assistant transport with an in-memory back-end that plays `script`.\n * Register it after `provideNhAssistant(...)` in the same injector. Every client feature\n * (status, agents, conversations, streamed turns, approvals, cancellation, sharing, read\n * state, live updates, uploads with their progress and MCP authorizations) then works without a\n * server. Inject `NhAssistantMockBackend` to switch the feature flag, simulate a colleague or\n * inspect the received requests and uploads.\n */\nexport function provideNhAssistantMockApi(script: NhAssistantMockScenario): EnvironmentProviders {\n return makeEnvironmentProviders([\n { provide: NH_ASSISTANT_MOCK_SCENARIO, useValue: script },\n NhAssistantMockBackend,\n { provide: NH_ASSISTANT_FETCH, useFactory: () => inject(NhAssistantMockBackend).fetch },\n { provide: NH_ASSISTANT_UPLOAD, useFactory: () => inject(NhAssistantMockBackend).upload },\n { provide: NhAssistantLiveService, useClass: NhAssistantMockLiveService },\n { provide: NH_ASSISTANT_MCP_AUTHORIZATION_WINDOW, useFactory: () => inject(NhAssistantMockBackend).authorizationWindow }\n ]);\n}\n","/*\n * Public API surface of @newheap/platform-ai-chat/testing.\n */\nexport * from './nh-assistant-mock.models';\nexport type { NhAssistantMockUpload } from './nh-assistant-mock-files';\nexport * from './nh-assistant-mock-backend';\nexport * from './nh-assistant-mock-live';\nexport * from './nh-assistant-mock-authorization';\nexport * from './provide-nh-assistant-mock-api';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["failure","subjectTypePattern","dataClassifications","validationFailure","maxStateReason","maxInstructions","hashText","classifications","mediaTypePattern","normalizeMediaType","maxDescription","maxReason","key","text","covers","keyOf","dashCase","maxMessage","indexOf","ɵnhAssistantMediaTypeOf","systemType","guidN","maxItemsPerPage","guid"],"mappings":"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"}
|