@newheap/platform-ai-chat 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +201 -0
- package/NOTICE +4 -0
- package/README.md +294 -0
- package/admin/index.d.ts +294 -0
- package/fesm2022/newheap-platform-ai-chat-admin.mjs +785 -0
- package/fesm2022/newheap-platform-ai-chat-admin.mjs.map +1 -0
- package/fesm2022/newheap-platform-ai-chat-testing.mjs +911 -0
- package/fesm2022/newheap-platform-ai-chat-testing.mjs.map +1 -0
- package/fesm2022/newheap-platform-ai-chat.mjs +3103 -0
- package/fesm2022/newheap-platform-ai-chat.mjs.map +1 -0
- package/i18n/en.json +376 -0
- package/i18n/nl.json +376 -0
- package/index.d.ts +937 -0
- package/package.json +54 -0
- package/testing/index.d.ts +189 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"newheap-platform-ai-chat-testing.mjs","sources":["../../../projects/nh-ai-chat/testing/src/nh-assistant-mock-admin.ts","../../../projects/nh-ai-chat/testing/src/nh-assistant-mock-backend.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":["import {\n AdminAgent,\n AdminAgentInput,\n AgentSummary,\n ApplicationContext,\n ApplicationContextVersion,\n AssistantAutonomy,\n AssistantPreferences,\n McpServer,\n McpServerInput,\n McpServerTestResult,\n McpTool,\n McpToolEffect,\n ToolCatalogEntry\n} from '@newheap/platform-ai-chat';\nimport { NhAssistantMockRemoteTool, NhAssistantMockScenario } from './nh-assistant-mock.models';\n\n/** A mock response: status plus optional JSON body. */\nexport interface NhAssistantMockResult {\n status: number;\n body?: unknown;\n}\n\ninterface StoredServer {\n server: Omit<McpServer, 'hasSecret' | 'assignedAgentIds'>;\n secret: string | null;\n remoteTools: NhAssistantMockRemoteTool[];\n tools: Map<string, McpTool & { inputSchemaHash: string }>;\n}\n\ninterface StoredAgent {\n agent: AdminAgent;\n /** The definition in code, for `reset`; null for admin agents. */\n codeDefinition: AdminAgentInput | null;\n}\n\nconst dashCase = /^[a-z0-9]+(?:-[a-z0-9]+)*$/;\nconst styles = ['default', 'direct', 'personal', 'detailed'];\nconst addressForms = ['informal', 'formal'];\nconst responseLengths = ['short', 'normal', 'long'];\nconst autonomyLevels: AssistantAutonomy[] = ['observe', 'explain', 'propose', 'simulate', 'execute'];\nconst authModes = ['none', 'bearer', 'api-key', 'forward-user-token'];\n\nconst maxInstructions = 20_000;\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. Follows the\n * contract rules: secrets are write-only, new MCP tools start disabled as mutations, a\n * changed remote schema disables a tool, and stale versions answer `409`.\n */\nexport class NhAssistantMockAdmin {\n private readonly agents = new Map<string, StoredAgent>();\n private readonly servers = new Map<string, StoredServer>();\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 const agents = admin.agents ?? scenario.agents.map(agent => ({ ...codeAgentFromSummary(agent), source: 'code' as const }));\n for (const { source, ...input } of agents) {\n this.agents.set(input.id, {\n agent: this.toAgent(input, source, 1, false),\n codeDefinition: source === 'code' ? structuredClone(input) : null\n });\n }\n\n for (const { remoteTools, secret, ...input } of admin.mcpServers ?? []) {\n this.servers.set(input.id, {\n server: { ...toServerFields(input), lastSyncAt: null, lastSyncStatus: null },\n secret: secret ?? null,\n remoteTools: remoteTools ?? [],\n tools: new Map()\n });\n }\n }\n\n get administers(): boolean {\n return this.canAdminister;\n }\n\n setCanAdminister(value: boolean): void {\n this.canAdminister = value;\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 /** Chat agents: enabled code agents keep their keys, admin agents carry literal text. */\n chatAgents(): AgentSummary[] {\n const result: AgentSummary[] = [];\n for (const { agent } of this.agents.values()) {\n if (!agent.isEnabled) {\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 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 handleAdmin(method: string, segments: string[], body: unknown): NhAssistantMockResult {\n if (!this.canAdminister) {\n return failure(403, '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(404, 'assistant-not-found');\n case 'agents':\n return this.agentsEndpoint(method, id, action, body, segments.length);\n case 'mcp-servers':\n return this.serversEndpoint(method, id, action, child, body, segments.length);\n default:\n return failure(404, '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(404, '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(400, 'assistant-instructions-too-long');\n }\n if (input.expectedVersion !== current.version) {\n return failure(409, '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 private toolCatalog(): ToolCatalogEntry[] {\n const catalog = [...(this.scenario.admin?.tools ?? [])];\n for (const stored of this.servers.values()) {\n for (const tool of stored.tools.values()) {\n if (tool.isEnabled) {\n catalog.push({ id: tool.localId, source: 'mcp', effect: tool.effect, description: tool.descriptionOverride ?? tool.description });\n }\n }\n }\n return catalog;\n }\n\n private 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);\n if (invalid) {\n return invalid;\n }\n if (this.agents.has(input.id)) {\n return failure(409, 'assistant-agent-exists');\n }\n\n const agent = this.toAgent(input, 'admin', 1, false);\n this.agents.set(agent.id, { agent, codeDefinition: null });\n return { status: 201, body: agent };\n }\n\n const stored = this.agents.get(id);\n if (!stored) {\n return failure(404, 'assistant-not-found');\n }\n\n if (length === 4 && action === 'reset' && method === 'POST') {\n if (!stored.codeDefinition) {\n return failure(409, 'assistant-agent-not-code');\n }\n stored.agent = this.toAgent(stored.codeDefinition, 'code', stored.agent.version + 1, false);\n return { status: 200, body: stored.agent };\n }\n if (length !== 3) {\n return failure(404, '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);\n if (invalid) {\n return invalid;\n }\n if (input.expectedVersion !== stored.agent.version) {\n return failure(409, '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');\n return { status: 200, body: stored.agent };\n }\n if (method === 'DELETE') {\n if (stored.agent.source === 'code') {\n return failure(409, 'assistant-code-agent-not-deletable');\n }\n this.agents.delete(id);\n return { status: 204 };\n }\n\n return { status: 405 };\n }\n\n private 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 === 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 (!validServer(input)) {\n return validationFailure();\n }\n if (this.servers.has(input.id)) {\n return failure(409, 'assistant-mcp-server-exists');\n }\n\n const stored: StoredServer = {\n server: { ...toServerFields(input), lastSyncAt: null, lastSyncStatus: null },\n secret: input.secret ? input.secret : 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(404, 'assistant-mcp-server-not-found');\n }\n\n if (length === 3) {\n if (method === 'PUT') {\n const input = body as McpServerInput;\n if (!validServer(input) || input.id !== id) {\n return validationFailure();\n }\n stored.server = { ...stored.server, ...toServerFields(input) };\n if (input.secret !== undefined) {\n stored.secret = input.secret ? input.secret : null;\n }\n return { status: 200, body: this.toServer(stored) };\n }\n if (method === 'DELETE') {\n this.servers.delete(id);\n for (const agent of this.agents.values()) {\n agent.agent = { ...agent.agent, mcpServerIds: agent.agent.mcpServerIds.filter(serverId => serverId !== id) };\n }\n return { status: 204 };\n }\n return { status: 405 };\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 return { status: 200, body: result };\n }\n if (length === 4 && action === 'sync' && method === 'POST') {\n const code = this.connectionFailure(stored);\n stored.server = { ...stored.server, lastSyncAt: this.now(), lastSyncStatus: code ? 'failed' : 'ok' };\n if (code) {\n // A blocked host is a configuration error; connection failures are upstream errors.\n return failure(code === 'assistant-mcp-host-blocked' ? 400 : 502, 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(404, '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(404, '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 private connectionFailure(stored: StoredServer): string | null {\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 ((stored.server.authMode === 'bearer' || stored.server.authMode === 'api-key') && !stored.secret) {\n return 'assistant-mcp-unauthorized';\n }\n return null;\n }\n\n /** The contract failure for an invalid agent, or null when the agent is valid. */\n private agentFailure(input: AdminAgentInput | undefined): NhAssistantMockResult | null {\n if (typeof input?.instructions === 'string' && input.instructions.length > maxInstructions) {\n return failure(400, 'assistant-instructions-too-long');\n }\n\n return this.validAgent(input) ? null : validationFailure();\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 && dashCase.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.servers.has(serverId)) &&\n (input.requiredPolicy === null || (typeof input.requiredPolicy === 'string' && (!policies || policies.includes(input.requiredPolicy)))) &&\n autonomyLevels.includes(input.autonomy) &&\n typeof input.isEnabled === 'boolean';\n }\n\n private toAgent(input: AdminAgentInput, source: 'code' | 'admin', version: number, isOverridden: boolean): AdminAgent {\n return {\n ...structuredClone(input),\n version,\n source,\n isOverridden,\n instructionsHash: hashText(input.instructions),\n updatedAt: this.now()\n };\n }\n\n private toServer(stored: StoredServer): McpServer {\n return {\n ...stored.server,\n hasSecret: stored.secret !== null,\n assignedAgentIds: [...this.agents.values()]\n .filter(agent => agent.agent.mcpServerIds.includes(stored.server.id))\n .map(agent => agent.agent.id)\n };\n }\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 isEnabled: true\n };\n}\n\nfunction toServerFields(input: McpServerInput): Pick<McpServer, 'id' | 'displayName' | 'url' | 'authMode' | 'headerName' | 'requiredPolicy' | 'isEnabled'> {\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 };\n}\n\nfunction validServer(input: McpServerInput | undefined): boolean {\n if (!input || typeof input.id !== 'string' || input.id.length > 40 || !dashCase.test(input.id) ||\n typeof input.displayName !== 'string' || input.displayName.trim().length === 0 ||\n !authModes.includes(input.authMode) || typeof input.isEnabled !== 'boolean') {\n return false;\n }\n\n try {\n const url = new URL(input.url);\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 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\n/** A contract error response: `{ code, messageKey, errors? }`, never free text. */\nfunction failure(status: number, code: string, errors?: Record<string, string[]>): NhAssistantMockResult {\n return { status, body: { code, messageKey: `nh-assistant.errors.${code}`, ...(errors ? { errors } : {}) } };\n}\n\nfunction validationFailure(field?: string): NhAssistantMockResult {\n return failure(400, 'assistant-validation', field ? { [field]: ['invalid'] } : undefined);\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\n/** A stable, non-cryptographic fingerprint; the mock only needs change detection. */\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 { Injectable, InjectionToken, inject, signal } from '@angular/core';\nimport {\n ApprovalPart,\n ClientContext,\n Conversation,\n ConversationSummary,\n CreateConversationRequest,\n DecideApprovalRequest,\n NH_ASSISTANT_CONFIG,\n NhAssistantSseEvent,\n SendMessageRequest,\n TurnUsage,\n applyNhAssistantApprovalDecision,\n applyNhAssistantEvent,\n normalizeNhAssistantClientContext\n} from '@newheap/platform-ai-chat';\nimport { NhAssistantMockAdmin } from './nh-assistant-mock-admin';\nimport {\n NhAssistantMockApprovalStep,\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\nconst defaultLimits = { maxMessageChars: 4_000, maxToolCallsPerTurn: 8 };\n\ninterface PendingApproval {\n approval: ApprovalPart;\n invocationId: string;\n assistantMessageId: string;\n step: NhAssistantMockApprovalStep['approval'];\n}\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 canAdministerState = signal(this.admin.administers);\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\n constructor() {\n for (const conversation of this.scenario.conversations ?? []) {\n this.conversations.set(conversation.id, structuredClone(conversation));\n }\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 /** 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 base = new URL(this.config.apiBaseUrl.replace(/\\/+$/, ''), 'http://mock.local').pathname;\n const path = url.pathname.startsWith(`${base}/`) ? url.pathname.slice(base.length + 1) : null;\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);\n };\n\n private route(method: string, path: string, query: URLSearchParams, body: unknown): 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 return this.json(200, this.enabledState()\n ? { enabled: true, agents: this.admin.chatAgents(), limits, canAdminister: this.admin.administers }\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] === 'admin') {\n return this.result(this.admin.handleAdmin(method, segments, body));\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, conversation);\n }\n if (method === 'DELETE') {\n this.conversations.delete(conversation.id);\n this.pendingApprovals.delete(conversation.id);\n return this.empty(204);\n }\n return this.empty(405);\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(({ id, agentId, title, status, createdAt, updatedAt }) => ({ id, agentId, title, status, createdAt, updatedAt }));\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\n return this.json(201, 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 if (conversation.status !== 'idle') {\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 this.update(conversation.id, current => ({\n ...current,\n title: current.title ?? text.slice(0, 60),\n status: 'running',\n messages: [...current.messages, { id: userMessageId, role: 'user', createdAt: new Date().toISOString(), parts: [{ type: 'text', text }] }]\n }));\n\n return this.stream(conversation.id, async emit => {\n await emit({ type: 'turn.started', data: { turnId: this.nextId(), userMessageId, assistantMessageId } });\n await this.playSteps(conversation.id, assistantMessageId, turn?.steps ?? [], emit);\n });\n }\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 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 decision = request.decision;\n const lastUser = [...conversation.messages].reverse().find(message => message.role === 'user');\n this.update(conversation.id, current => applyNhAssistantApprovalDecision(current, approvalId, decision));\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 {\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 }\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 argumentsPreview: step.argumentsPreview,\n targets: step.targets,\n expiresAt: new Date(Date.now() + (step.expiresInSeconds ?? 300) * 1000).toISOString(),\n status: 'pending'\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 this.conversations.set(conversationId, { ...change(conversation), updatedAt: new Date().toISOString() });\n }\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 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 delay(milliseconds: number): Promise<void> {\n return new Promise(resolve => setTimeout(resolve, milliseconds));\n}\n","import { EnvironmentProviders, inject, makeEnvironmentProviders } from '@angular/core';\nimport { NH_ASSISTANT_FETCH } from '@newheap/platform-ai-chat';\nimport { NH_ASSISTANT_MOCK_SCENARIO, NhAssistantMockBackend } from './nh-assistant-mock-backend';\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) then works\n * without a server. Inject `NhAssistantMockBackend` to switch the feature flag or to\n * inspect the received requests.\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 ]);\n}\n","/*\n * Public API surface of @newheap/platform-ai-chat/testing.\n */\nexport * from './nh-assistant-mock.models';\nexport * from './nh-assistant-mock-backend';\nexport * from './provide-nh-assistant-mock-api';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|