@123toto/ai-app-assistant-server 0.2.0 → 0.2.1

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/dist/index.d.cts CHANGED
@@ -1,5 +1,5 @@
1
- import { A as AiAppAssistant, a as AiAppAssistantStreamEvent, b as AiAppAssistantConfiguration, B as BuiltInProvider } from './managed-server-CthTKEQ6.cjs';
2
- export { c as AiAppAssistantAccessRule, d as AiAppAssistantConfigurationActor, e as AiAppAssistantConfigurationAdministration, f as AiAppAssistantConfigurationAuditChange, g as AiAppAssistantConfigurationAuditEntry, h as AiAppAssistantConfigurationAuditField, i as AiAppAssistantConfigurationChangeEvent, j as AiAppAssistantConfigurationConflictError, k as AiAppAssistantConfigurationManager, l as AiAppAssistantConfigurationManagerOptions, m as AiAppAssistantConfigurationRepository, n as AiAppAssistantConfigurationSaveResult, o as AiAppAssistantConfigurationSynchronizer, p as AiAppAssistantConfigurationView, q as AiAppAssistantGenerationEvent, r as AiAppAssistantGenerationOperation, s as AiAppAssistantKeyValueStore, t as AiAppAssistantManagedConfigurationSetup, u as AiAppAssistantManagedStorage, v as AiAppAssistantManagementError, w as AiAppAssistantManagementErrorCode, x as AiAppAssistantQuotaPolicy, y as AiAppAssistantQuotaResult, z as AiAppAssistantQuotaStore, C as AiAppAssistantRecentFailure, D as AiAppAssistantRedisClient, E as AiAppAssistantRedisQuotaClient, F as AiAppAssistantRedisTelemetryClient, G as AiAppAssistantRuntimeIdentity, H as AiAppAssistantSecretProtector, I as AiAppAssistantTelemetryStore, J as AiAppAssistantTelemetrySummary, K as AiModelDiscoveryError, L as AiModelInfo, N as AiProviderInfo, O as CreateAiAppAssistantConfigurationRepositoryOptions, P as CreateManagedAiAppAssistantRuntimeOptions, Q as CreateManagedAiAppAssistantServerOptions, R as ListAiModelsOptions, S as ManagedAiAppAssistantFetchHandlerOptions, T as ManagedAiAppAssistantFetchHandlers, U as ManagedAiAppAssistantRuntime, M as ManagedAiAppAssistantServer, V as createAes256GcmSecretProtector, W as createAiAppAssistant, X as createAiAppAssistantConfigurationRepository, Y as createAiAppAssistantFailureEvent, Z as createDisabledSecretProtector, _ as createManagedAiAppAssistantFetchHandlers, $ as createManagedAiAppAssistantRuntime, a0 as createManagedAiAppAssistantServer, a1 as createMemoryAiAppAssistantQuotaStore, a2 as createMemoryAiAppAssistantStore, a3 as createMemoryAiAppAssistantTelemetryStore, a4 as createPollingAiAppAssistantConfigurationSynchronizer, a5 as createRedisAiAppAssistantQuotaStore, a6 as createRedisAiAppAssistantStore, a7 as createRedisAiAppAssistantTelemetryStore, a8 as listAiModels, a9 as listAiProviders, aa as validateAndSaveAiAppAssistantConfiguration } from './managed-server-CthTKEQ6.cjs';
1
+ import { A as AiAppAssistant, a as AiAppAssistantStreamEvent, b as AiAppAssistantConfiguration, B as BuiltInProvider } from './managed-server-CQb-RK-i.cjs';
2
+ export { c as AiAppAssistantAccessRule, d as AiAppAssistantConfigurationActor, e as AiAppAssistantConfigurationAdministration, f as AiAppAssistantConfigurationAuditChange, g as AiAppAssistantConfigurationAuditEntry, h as AiAppAssistantConfigurationAuditField, i as AiAppAssistantConfigurationChangeEvent, j as AiAppAssistantConfigurationConflictError, k as AiAppAssistantConfigurationManager, l as AiAppAssistantConfigurationManagerOptions, m as AiAppAssistantConfigurationRepository, n as AiAppAssistantConfigurationSaveResult, o as AiAppAssistantConfigurationSynchronizer, p as AiAppAssistantConfigurationView, q as AiAppAssistantGenerationEvent, r as AiAppAssistantGenerationOperation, s as AiAppAssistantKeyValueStore, t as AiAppAssistantManagedConfigurationSetup, u as AiAppAssistantManagedStorage, v as AiAppAssistantManagementError, w as AiAppAssistantManagementErrorCode, x as AiAppAssistantQuotaPolicy, y as AiAppAssistantQuotaResult, z as AiAppAssistantQuotaStore, C as AiAppAssistantRecentFailure, D as AiAppAssistantRedisClient, E as AiAppAssistantRedisQuotaClient, F as AiAppAssistantRedisTelemetryClient, G as AiAppAssistantRuntimeIdentity, H as AiAppAssistantSecretProtector, I as AiAppAssistantTelemetryStore, J as AiAppAssistantTelemetrySummary, K as AiModelDiscoveryError, L as AiModelInfo, N as AiProviderInfo, O as CreateAiAppAssistantConfigurationRepositoryOptions, P as CreateManagedAiAppAssistantRuntimeOptions, Q as CreateManagedAiAppAssistantServerOptions, R as ListAiModelsOptions, S as ManagedAiAppAssistantFetchHandlerOptions, T as ManagedAiAppAssistantFetchHandlers, U as ManagedAiAppAssistantRuntime, M as ManagedAiAppAssistantServer, V as createAes256GcmSecretProtector, W as createAiAppAssistant, X as createAiAppAssistantConfigurationRepository, Y as createAiAppAssistantFailureEvent, Z as createDisabledSecretProtector, _ as createManagedAiAppAssistantFetchHandlers, $ as createManagedAiAppAssistantRuntime, a0 as createManagedAiAppAssistantServer, a1 as createMemoryAiAppAssistantQuotaStore, a2 as createMemoryAiAppAssistantStore, a3 as createMemoryAiAppAssistantTelemetryStore, a4 as createPollingAiAppAssistantConfigurationSynchronizer, a5 as createRedisAiAppAssistantQuotaStore, a6 as createRedisAiAppAssistantStore, a7 as createRedisAiAppAssistantTelemetryStore, a8 as listAiModels, a9 as listAiProviders, aa as validateAndSaveAiAppAssistantConfiguration } from './managed-server-CQb-RK-i.cjs';
3
3
  import { AiAppAssistantRequest, AiAppAssistantResponse } from '@123toto/ai-app-assistant-contracts';
4
4
  export { AiAppAssistantConfigurationFieldSource, AiAppAssistantConfigurationInput, AiAppAssistantConfigurationOptions, AiAppAssistantConnectionResult, AiAppAssistantConnectionTestInput, AiAppAssistantCredentials, AiAppAssistantManagedConfigurationView, AiAppAssistantModelInfoContract, AiAppAssistantProvider, AiAppAssistantProviderInfoContract, AiAppAssistantRequest, AiAppAssistantResponse, AiAppAssistantRuntimeConnection, AiAppAssistantRuntimeConnectionStatus, AiAppAssistantTransportEvent, EvidenceSource, GeneratedAnswer, PROTOCOL_VERSION, aiAppAssistantAccessRuleSchema, aiAppAssistantConfigurationInputSchema, aiAppAssistantConfigurationOptionsSchema, aiAppAssistantConfigurationSaveResultSchema, aiAppAssistantConnectionResultSchema, aiAppAssistantConnectionTestInputSchema, aiAppAssistantCredentialsSchema, aiAppAssistantManagedConfigurationViewSchema, aiAppAssistantModelInfoSchema, aiAppAssistantProviderInfoSchema, aiAppAssistantProviderSchema, aiAppAssistantRequestSchema, aiAppAssistantResponseSchema, aiAppAssistantTransportEventSchema } from '@123toto/ai-app-assistant-contracts';
5
5
  import { IncomingMessage, ServerResponse } from 'node:http';
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
- import { A as AiAppAssistant, a as AiAppAssistantStreamEvent, b as AiAppAssistantConfiguration, B as BuiltInProvider } from './managed-server-BGQ-1jkx.js';
2
- export { c as AiAppAssistantAccessRule, d as AiAppAssistantConfigurationActor, e as AiAppAssistantConfigurationAdministration, f as AiAppAssistantConfigurationAuditChange, g as AiAppAssistantConfigurationAuditEntry, h as AiAppAssistantConfigurationAuditField, i as AiAppAssistantConfigurationChangeEvent, j as AiAppAssistantConfigurationConflictError, k as AiAppAssistantConfigurationManager, l as AiAppAssistantConfigurationManagerOptions, m as AiAppAssistantConfigurationRepository, n as AiAppAssistantConfigurationSaveResult, o as AiAppAssistantConfigurationSynchronizer, p as AiAppAssistantConfigurationView, q as AiAppAssistantGenerationEvent, r as AiAppAssistantGenerationOperation, s as AiAppAssistantKeyValueStore, t as AiAppAssistantManagedConfigurationSetup, u as AiAppAssistantManagedStorage, v as AiAppAssistantManagementError, w as AiAppAssistantManagementErrorCode, x as AiAppAssistantQuotaPolicy, y as AiAppAssistantQuotaResult, z as AiAppAssistantQuotaStore, C as AiAppAssistantRecentFailure, D as AiAppAssistantRedisClient, E as AiAppAssistantRedisQuotaClient, F as AiAppAssistantRedisTelemetryClient, G as AiAppAssistantRuntimeIdentity, H as AiAppAssistantSecretProtector, I as AiAppAssistantTelemetryStore, J as AiAppAssistantTelemetrySummary, K as AiModelDiscoveryError, L as AiModelInfo, N as AiProviderInfo, O as CreateAiAppAssistantConfigurationRepositoryOptions, P as CreateManagedAiAppAssistantRuntimeOptions, Q as CreateManagedAiAppAssistantServerOptions, R as ListAiModelsOptions, S as ManagedAiAppAssistantFetchHandlerOptions, T as ManagedAiAppAssistantFetchHandlers, U as ManagedAiAppAssistantRuntime, M as ManagedAiAppAssistantServer, V as createAes256GcmSecretProtector, W as createAiAppAssistant, X as createAiAppAssistantConfigurationRepository, Y as createAiAppAssistantFailureEvent, Z as createDisabledSecretProtector, _ as createManagedAiAppAssistantFetchHandlers, $ as createManagedAiAppAssistantRuntime, a0 as createManagedAiAppAssistantServer, a1 as createMemoryAiAppAssistantQuotaStore, a2 as createMemoryAiAppAssistantStore, a3 as createMemoryAiAppAssistantTelemetryStore, a4 as createPollingAiAppAssistantConfigurationSynchronizer, a5 as createRedisAiAppAssistantQuotaStore, a6 as createRedisAiAppAssistantStore, a7 as createRedisAiAppAssistantTelemetryStore, a8 as listAiModels, a9 as listAiProviders, aa as validateAndSaveAiAppAssistantConfiguration } from './managed-server-BGQ-1jkx.js';
1
+ import { A as AiAppAssistant, a as AiAppAssistantStreamEvent, b as AiAppAssistantConfiguration, B as BuiltInProvider } from './managed-server-CGmvVYsF.js';
2
+ export { c as AiAppAssistantAccessRule, d as AiAppAssistantConfigurationActor, e as AiAppAssistantConfigurationAdministration, f as AiAppAssistantConfigurationAuditChange, g as AiAppAssistantConfigurationAuditEntry, h as AiAppAssistantConfigurationAuditField, i as AiAppAssistantConfigurationChangeEvent, j as AiAppAssistantConfigurationConflictError, k as AiAppAssistantConfigurationManager, l as AiAppAssistantConfigurationManagerOptions, m as AiAppAssistantConfigurationRepository, n as AiAppAssistantConfigurationSaveResult, o as AiAppAssistantConfigurationSynchronizer, p as AiAppAssistantConfigurationView, q as AiAppAssistantGenerationEvent, r as AiAppAssistantGenerationOperation, s as AiAppAssistantKeyValueStore, t as AiAppAssistantManagedConfigurationSetup, u as AiAppAssistantManagedStorage, v as AiAppAssistantManagementError, w as AiAppAssistantManagementErrorCode, x as AiAppAssistantQuotaPolicy, y as AiAppAssistantQuotaResult, z as AiAppAssistantQuotaStore, C as AiAppAssistantRecentFailure, D as AiAppAssistantRedisClient, E as AiAppAssistantRedisQuotaClient, F as AiAppAssistantRedisTelemetryClient, G as AiAppAssistantRuntimeIdentity, H as AiAppAssistantSecretProtector, I as AiAppAssistantTelemetryStore, J as AiAppAssistantTelemetrySummary, K as AiModelDiscoveryError, L as AiModelInfo, N as AiProviderInfo, O as CreateAiAppAssistantConfigurationRepositoryOptions, P as CreateManagedAiAppAssistantRuntimeOptions, Q as CreateManagedAiAppAssistantServerOptions, R as ListAiModelsOptions, S as ManagedAiAppAssistantFetchHandlerOptions, T as ManagedAiAppAssistantFetchHandlers, U as ManagedAiAppAssistantRuntime, M as ManagedAiAppAssistantServer, V as createAes256GcmSecretProtector, W as createAiAppAssistant, X as createAiAppAssistantConfigurationRepository, Y as createAiAppAssistantFailureEvent, Z as createDisabledSecretProtector, _ as createManagedAiAppAssistantFetchHandlers, $ as createManagedAiAppAssistantRuntime, a0 as createManagedAiAppAssistantServer, a1 as createMemoryAiAppAssistantQuotaStore, a2 as createMemoryAiAppAssistantStore, a3 as createMemoryAiAppAssistantTelemetryStore, a4 as createPollingAiAppAssistantConfigurationSynchronizer, a5 as createRedisAiAppAssistantQuotaStore, a6 as createRedisAiAppAssistantStore, a7 as createRedisAiAppAssistantTelemetryStore, a8 as listAiModels, a9 as listAiProviders, aa as validateAndSaveAiAppAssistantConfiguration } from './managed-server-CGmvVYsF.js';
3
3
  import { AiAppAssistantRequest, AiAppAssistantResponse } from '@123toto/ai-app-assistant-contracts';
4
4
  export { AiAppAssistantConfigurationFieldSource, AiAppAssistantConfigurationInput, AiAppAssistantConfigurationOptions, AiAppAssistantConnectionResult, AiAppAssistantConnectionTestInput, AiAppAssistantCredentials, AiAppAssistantManagedConfigurationView, AiAppAssistantModelInfoContract, AiAppAssistantProvider, AiAppAssistantProviderInfoContract, AiAppAssistantRequest, AiAppAssistantResponse, AiAppAssistantRuntimeConnection, AiAppAssistantRuntimeConnectionStatus, AiAppAssistantTransportEvent, EvidenceSource, GeneratedAnswer, PROTOCOL_VERSION, aiAppAssistantAccessRuleSchema, aiAppAssistantConfigurationInputSchema, aiAppAssistantConfigurationOptionsSchema, aiAppAssistantConfigurationSaveResultSchema, aiAppAssistantConnectionResultSchema, aiAppAssistantConnectionTestInputSchema, aiAppAssistantCredentialsSchema, aiAppAssistantManagedConfigurationViewSchema, aiAppAssistantModelInfoSchema, aiAppAssistantProviderInfoSchema, aiAppAssistantProviderSchema, aiAppAssistantRequestSchema, aiAppAssistantResponseSchema, aiAppAssistantTransportEventSchema } from '@123toto/ai-app-assistant-contracts';
5
5
  import { IncomingMessage, ServerResponse } from 'node:http';
package/dist/index.js CHANGED
@@ -896,12 +896,17 @@ var AiAppAssistantConfigurationManager = class {
896
896
  this.#repository = options.repository;
897
897
  this.#quotaStore = options.quotaStore ?? createMemoryAiAppAssistantQuotaStore();
898
898
  }
899
+ /** Returns the current state of the host-controlled global kill switch. */
900
+ isEnabled() {
901
+ return typeof this.#options.enabled === "function" ? this.#options.enabled() : this.#options.enabled ?? true;
902
+ }
899
903
  /** Returns the built-in provider catalogue; no credentials are exposed. */
900
904
  listProviders() {
901
905
  return listAiProviders();
902
906
  }
903
907
  /** Discovers models with an explicit key or the currently configured secret. */
904
908
  async listModels(input) {
909
+ this.assertEnabled();
905
910
  const apiKey = await this.resolveApiKey(input.provider, input.apiKey);
906
911
  if (this.#options.listModels) {
907
912
  return this.#options.listModels({ ...input, ...apiKey ? { apiKey } : {} });
@@ -927,7 +932,10 @@ var AiAppAssistantConfigurationManager = class {
927
932
  let connected = event.connectionValidated;
928
933
  if (event.reloadRequired) {
929
934
  this.#recentConnectionValidation = void 0;
930
- if (connected) {
935
+ if (!this.isEnabled()) {
936
+ connected = false;
937
+ this.#runtimeConnection = { status: "disabled", checkedAt: this.now() };
938
+ } else if (connected) {
931
939
  const configuration = await this.getRuntimeConfiguration();
932
940
  this.#runtimeConnection = configuration ? {
933
941
  status: "connected",
@@ -957,6 +965,7 @@ var AiAppAssistantConfigurationManager = class {
957
965
  }
958
966
  /** Tests credentials and briefly caches a successful result for the next save. */
959
967
  async testConnection(input) {
968
+ this.assertEnabled();
960
969
  const apiKey = await this.resolveApiKey(input.provider, input.apiKey);
961
970
  const connection = this.#options.testConnection ? await this.#options.testConnection({ ...input, ...apiKey ? { apiKey } : {} }) : await testAiSdkConnection({
962
971
  model: `${input.provider}:${input.model}`,
@@ -985,6 +994,10 @@ var AiAppAssistantConfigurationManager = class {
985
994
  /** Checks the effective stored/deployment connection used by live questions. */
986
995
  async validateRuntimeConnection() {
987
996
  this.#lastReconnectAttempt = Date.now();
997
+ if (!this.isEnabled()) {
998
+ this.#runtimeConnection = { status: "disabled", checkedAt: this.now() };
999
+ return false;
1000
+ }
988
1001
  const configuration = await this.getRuntimeConfiguration();
989
1002
  if (!configuration || configuration.provider !== "ollama" && !configuration.apiKey) {
990
1003
  this.#runtimeConnection = {
@@ -1027,6 +1040,7 @@ var AiAppAssistantConfigurationManager = class {
1027
1040
  const initialActive = this.effectiveConfiguration(initial);
1028
1041
  const initialApiKey = input.apiKey ?? (initialActive?.provider === input.provider ? initialActive.apiKey : void 0) ?? this.resolveDefaultApiKey(input.provider);
1029
1042
  const initialConnectionChanged = connectionChanged(initialActive, input);
1043
+ if (!this.isEnabled() && initialConnectionChanged) throw disabled();
1030
1044
  let connection = initialConnectionChanged ? await this.validateConnectionForSave(input, initialApiKey) : this.lastKnownConnection(input.provider, input.model);
1031
1045
  if (initialConnectionChanged && !connection.success) {
1032
1046
  return { saved: false, connection, reloadRequired: false };
@@ -1255,6 +1269,7 @@ var AiAppAssistantConfigurationManager = class {
1255
1269
  }
1256
1270
  /** Combines configuration, provider health and application access rules. */
1257
1271
  async canUse(identity) {
1272
+ if (!this.isEnabled()) return false;
1258
1273
  const configuration = await this.getRuntimeConfiguration();
1259
1274
  if (!configuration || configuration.provider !== "ollama" && !configuration.apiKey) return false;
1260
1275
  if (!await this.ensureRuntimeConnection()) return false;
@@ -1273,6 +1288,7 @@ var AiAppAssistantConfigurationManager = class {
1273
1288
  }
1274
1289
  /** Enforces access and quota immediately before any model call. */
1275
1290
  async assertCanAsk(identity) {
1291
+ this.assertEnabled();
1276
1292
  if (!await this.canUse(identity)) {
1277
1293
  throw forbidden("AI assistant access is not enabled for this user");
1278
1294
  }
@@ -1288,6 +1304,7 @@ var AiAppAssistantConfigurationManager = class {
1288
1304
  }
1289
1305
  /** Retries a failed provider lazily, with a shared backoff across requests. */
1290
1306
  async ensureRuntimeConnection() {
1307
+ if (!this.isEnabled()) return false;
1291
1308
  if (this.#runtimeConnection.status === "connected") return true;
1292
1309
  const intervalMs = Math.max(1e3, this.#options.reconnectIntervalMs ?? 3e4);
1293
1310
  if (Date.now() - this.#lastReconnectAttempt < intervalMs) return false;
@@ -1395,6 +1412,9 @@ var AiAppAssistantConfigurationManager = class {
1395
1412
  now() {
1396
1413
  return (this.#options.now?.() ?? /* @__PURE__ */ new Date()).toISOString();
1397
1414
  }
1415
+ assertEnabled() {
1416
+ if (!this.isEnabled()) throw disabled();
1417
+ }
1398
1418
  async publishAndEmit(event) {
1399
1419
  await this.#options.synchronizer?.publish(event);
1400
1420
  await this.emit(event);
@@ -1518,6 +1538,13 @@ function configurationChanges(previous, input, allowModelChangesByOthers) {
1518
1538
  function forbidden(message) {
1519
1539
  return new AiAppAssistantManagementError(403, "forbidden", message);
1520
1540
  }
1541
+ function disabled() {
1542
+ return new AiAppAssistantManagementError(
1543
+ 503,
1544
+ "assistant_disabled",
1545
+ "AI assistant is disabled"
1546
+ );
1547
+ }
1521
1548
 
1522
1549
  // src/telemetry.ts
1523
1550
  function createMemoryAiAppAssistantTelemetryStore(options) {
@@ -1687,6 +1714,11 @@ function createManagedAiAppAssistantRuntime(options) {
1687
1714
  return reloadQueue;
1688
1715
  });
1689
1716
  const rebuild = async (event) => {
1717
+ if (!options.configuration.isEnabled()) {
1718
+ assistant = void 0;
1719
+ activeGenerator = void 0;
1720
+ return;
1721
+ }
1690
1722
  const connected = event.connectionValidated || await options.configuration.validateRuntimeConnection();
1691
1723
  const configuration = await options.configuration.getRuntimeConfiguration();
1692
1724
  if (!connected || !configuration) {