@dsh-enhanced/assistant-health 0.1.6 → 0.1.12

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 CHANGED
@@ -9,7 +9,48 @@ dsh plugin --profile web add @dsh-enhanced/assistant-health
9
9
  dsh --profile web --dump-config
10
10
  ```
11
11
 
12
- 默认把 Policy、Memory、Wiki、Automations 设为 required;Delivery、Credentials、Event、Heartbeat、Lark 未安装不会让 core readiness 失败。`ctx.assistantHealth.liveness()` 只表示进程内 service 活着;`readiness()` 只调用本地 content-free health seam,不调用模型、工具或外网。详细 `assistant_health` tool 还需目标 Agent 对 `tool:assistant-health` 的 `inspect` Policy 规则。
12
+ 默认把 Policy、Memory、Wiki、Automations 设为 required;Evaluation、Preference Learning、Evolution、Growth Experiments、Delivery、Credentials、Event、Recovery、Heartbeat、Lark 未安装不会让 core readiness 失败。`supervised` 安装器会自动安装本插件,并把 Delivery、Evaluation、Preference Learning、Evolution、Growth Experiments、Recovery、Heartbeat、Lark Channel 连同四个核心 provider 写入 `requiredProviders`。v2 Recovery 已取代旧的 model maintenance Heartbeat;当前 Heartbeat 只承载独立、受限且有每日预算的 adoption analyst,因此仍属于 supervised readiness。配置和报告中的稳定公开 id 是 `preferenceLearning`,Health 会把它解析到 provider 实际注册的 Cordis service `assistantPreferenceLearning`。`ctx.assistantHealth.liveness()` 只表示进程内 service 活着;`readiness()` 只调用本地 content-free health seam,不调用模型、工具或外网。详细 `assistant_health` tool 还需目标 Agent 对 `tool:assistant-health` 的 `inspect` Policy 规则。
13
+
14
+ 固定 Host runbook 只能调用明确无 scope 的 `hostGlobalSnapshot({ principal, operationId })`。该入口通过
15
+ 固定 background subject `dsh-enhanced-assistant-recovery` 对全局资源
16
+ `tool:assistant-health:global/inspect` 做 Policy 授权,返回与详细报告相同的 content-free 白名单快照;
17
+ 它没有任何 repair/execute 方法。此结果只可用于 run admission、全局 verification 与告警,不能作为
18
+ 某个 workspace/preset 的 Preference/Evolution mutation 证据;scoped plan 必须分别读取对应插件的
19
+ exact branded Host API。入口拒绝携带 scope/workspace/preset,避免把其他 workspace 的故障误标成当前
20
+ scope 的动作依据。
21
+
22
+ 技术可调用性与业务健康度分开表达:provider 的 `status` 仍只表示 health seam 是否存在、可调用且满足白名单;详细报告新增 `severity` 与低基数 `assessments`。Evaluation 公开 schema version、按 trust 分组的 outcome 数、自评数、task projection/冲突数及可选的最后发生时间;任务级 owner 判断冲突会产生 `evaluation-task-conflicts`,但不泄露原始 outcome。Preference Learning 只公开 enabled、signal/hypothesis 与各状态计数;两者都不暴露 situation、偏好值、evidence 或数据库路径。Evolution 另外分开展示 quality-eligible、operational 与 legacy-quarantined episode,不能再把 execution telemetry 误读成学习样本;这些新字段在 v4/v5 滚动升级中按全无(N-1)或全有(N)接受,partial projection 会 fail closed。Policy emergency stop 会让 readiness 失败;required Preference Learning disabled、required provider 缺失/异常以及 required Lark disabled/disconnected 也会失败。Automations 的 Evaluation dead-letter 当前积压、Delivery unknown/dead-letter backlog、Wiki lint error 和可选 Lark 断联会产生 degraded/unhealthy assessment,但不会一概把仍可服务的进程伪装成未就绪。历史累计值只作为指标展示,不用于判断当前健康;正常的短暂 pending 和最后发生时间是否过旧依赖部署工作负载,也不会在此使用固定阈值误报。
23
+
24
+ Delivery v9 的死信与 unknown 状态按 `actionable*` 指标判断;已经写入不可变 operator resolution
25
+ receipt 的 terminal 历史仍可审计,但不会永久污染健康。滚动升级期间若 Delivery 尚未提供这些新
26
+ 指标,Health 会保守回退到原始 terminal 计数。Delivery v10 还原子投影
27
+ `pendingPresentations / deadPresentations`:前者表示审批实际终态或 incident 卡仍待原位更新,产生
28
+ degraded;后者表示更新已进入不可自动恢复的死信,产生 unhealthy。N-1 两字段全无仍接受,partial
29
+ pair 会 fail closed,避免把“领域已生效、owner 仍看到等待中”静默隐藏。
30
+
31
+ Automations 新版可增加 `openCircuits`;N-1 provider 缺该字段仍可滚动升级,N provider 一旦提供则必须是
32
+ nonnegative safe integer,非零产生 `open-circuit-backlog` degraded assessment。后续版本还能原子增加
33
+ `openIncidents / pendingIncidentAlerts`:两者必须全无或全有,partial/malformed projection fail closed;
34
+ 非零分别产生 `open-incident-backlog` / `pending-incident-alerts` degraded assessment。指标均为计数,
35
+ 不会透出 definition、错误正文或告警收件人。Assistant Recovery 整个
36
+ provider 可选;一旦以 `assistantRecovery` 安装,其 `runningRuns / failedRuns / unknownRuns /
37
+ incompleteSteps / staleRuns / staleSteps / lastSucceededAt / lastFailedAt` 八字段必须全部存在且合法,partial/malformed payload
38
+ 整条 fail closed 为 provider error。新版还可原子增加 production-only 的 `latestProductionStatus /
39
+ consecutiveProductionFailures / lastProductionRunAt` 三字段;N-1 全无仍接受,N 必须全有且合法,preview
40
+ run 不得覆盖 production 状态。最新 production 为 `failed` / `unknown` 会产生 `incomplete-recovery`;只有
41
+ 超过 Recovery 自己持久 deadline 的 run/step 才产生 `stale-recovery-intent`,正常正在执行的 step 不会被
42
+ 自我标成故障。exact bootstrap 版本另外原子投影 `bootstrapGeneration / bootstrapAttestationValid /
43
+ bootstrapAttestationSetDigest`,并校验但不输出 attestation job/nonce/plan tuple;partial projection 会把
44
+ provider 标为 error,`succeeded` 却证明无效时产生 `bootstrap-attestation-invalid`,required 模式阻断
45
+ readiness。累计 failed/unknown 历史只保留可观测性,不会永久污染健康。本插件仍 detect-only,不据此执行修复。
46
+
47
+ Growth Experiments 只投影 `candidates / readyCandidates / activeExperiments / rollbackPending /
48
+ promoted / traceRevisions / currentTraces / exhaustedRollbacks` 和可选的低基数
49
+ `lastErrorCode`。回滚待处理会降级;回滚重试预算耗尽为 unhealthy,且当该 provider 被列为
50
+ required 时会阻断 readiness。Plugin Control Plane 只投影 `gaps / readyPlans /
51
+ activeActivations / failed / rollbackPending`;required control plane 尚有 activation rollback
52
+ 未完成时 readiness fail closed。两种 provider 的路径、workflow、principal、命令、审批正文和
53
+ 错误正文都不会进入报告,partial、负数或越界 payload 会把整个 provider 标为 error。
13
54
 
14
55
  输出字段是逐 provider 白名单:未知 key、error message、content、prompt、cwd、vault/database path、消息、secret 和 tenant 标识不会透出。Provider 抛错只标记 `error`,不会包含异常正文。
15
56
 
package/lib/service.d.ts CHANGED
@@ -1,9 +1,10 @@
1
1
  import { Context, Service } from '@deepseek-ai/cordis';
2
2
  import type { Agent } from '@deepseek-ai/dsh-agent';
3
3
  import Schema from '@deepseek-ai/schemastery';
4
- export declare const providerIds: readonly ["assistantPolicy", "personalMemory", "personalWiki", "assistantAutomations", "assistantDelivery", "credentialsKeychain", "eventTriggers", "assistantHeartbeat", "larkChannel"];
4
+ export declare const providerIds: readonly ["assistantPolicy", "personalMemory", "personalWiki", "assistantAutomations", "assistantEvaluation", "preferenceLearning", "assistantEvolution", "assistantDelivery", "credentialsKeychain", "eventTriggers", "assistantRecovery", "assistantGrowthExperiments", "pluginControlPlane", "assistantHeartbeat", "larkChannel"];
5
5
  export type HealthProviderId = typeof providerIds[number];
6
6
  export type HealthMetric = boolean | number | string;
7
+ export type HealthSeverity = 'healthy' | 'degraded' | 'unhealthy';
7
8
  export interface Config {
8
9
  requiredProviders?: HealthProviderId[];
9
10
  }
@@ -12,17 +13,33 @@ export interface ProviderHealth {
12
13
  status: 'error' | 'missing' | 'ready';
13
14
  metrics: Readonly<Record<string, HealthMetric>>;
14
15
  }
16
+ export interface HealthAssessment {
17
+ providerId: HealthProviderId;
18
+ severity: Exclude<HealthSeverity, 'healthy'>;
19
+ /** Stable, low-cardinality reason code. */
20
+ code: string;
21
+ }
15
22
  export interface AssistantHealthReport {
16
23
  ready: boolean;
24
+ severity: HealthSeverity;
17
25
  generatedAt: number;
18
26
  providers: readonly ProviderHealth[];
27
+ assessments: readonly HealthAssessment[];
19
28
  warnings: readonly string[];
20
29
  }
21
- export type AssistantHealthErrorCode = 'disposed' | 'policy-denied';
30
+ export type AssistantHealthErrorCode = 'disposed' | 'invalid-input' | 'invalid-scope' | 'missing-principal' | 'policy-denied';
22
31
  export declare class AssistantHealthError extends Error {
23
32
  readonly code: AssistantHealthErrorCode;
24
33
  constructor(code: AssistantHealthErrorCode, message: string);
25
34
  }
35
+ /** Fixed Policy subject used by the non-model supervised-growth runbook. */
36
+ export declare const HOST_RECOVERY_BACKGROUND_ID = "dsh-enhanced-assistant-recovery";
37
+ export interface HealthHostGlobalOperation {
38
+ /** Authenticated owner identity supplied by the Host route, never a model. */
39
+ principal: string;
40
+ /** Exact fixed-run receipt/run identifier used for Policy budget idempotency. */
41
+ operationId: string;
42
+ }
26
43
  declare module '@deepseek-ai/cordis' {
27
44
  interface Context {
28
45
  assistantHealth: AssistantHealthService;
@@ -46,6 +63,13 @@ export declare class AssistantHealthService extends Service {
46
63
  warnings: string[];
47
64
  };
48
65
  report(agent: Agent | undefined): AssistantHealthReport;
66
+ /**
67
+ * Agent-free, content-free global snapshot for runbook admission and alerts.
68
+ * It is deliberately unscoped and cannot prove a workspace-local mutation.
69
+ * This remains detect-only: it does not expose or invoke any repair method.
70
+ */
71
+ hostGlobalSnapshot(input: HealthHostGlobalOperation): AssistantHealthReport;
72
+ private snapshot;
49
73
  private collect;
50
74
  private assertActive;
51
75
  }
@@ -1 +1 @@
1
- {"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AACtD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAA;AACnD,OAAO,MAAM,MAAM,0BAA0B,CAAA;AAI7C,eAAO,MAAM,WAAW,0LAUd,CAAA;AAEV,MAAM,MAAM,gBAAgB,GAAG,OAAO,WAAW,CAAC,MAAM,CAAC,CAAA;AACzD,MAAM,MAAM,YAAY,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,CAAA;AAEpD,MAAM,WAAW,MAAM;IACrB,iBAAiB,CAAC,EAAE,gBAAgB,EAAE,CAAA;CACvC;AAED,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,gBAAgB,CAAA;IACpB,MAAM,EAAE,OAAO,GAAG,SAAS,GAAG,OAAO,CAAA;IACrC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC,CAAA;CAChD;AAED,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE,OAAO,CAAA;IACd,WAAW,EAAE,MAAM,CAAA;IACnB,SAAS,EAAE,SAAS,cAAc,EAAE,CAAA;IACpC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAA;CAC5B;AAED,MAAM,MAAM,wBAAwB,GAAG,UAAU,GAAG,eAAe,CAAA;AACnE,qBAAa,oBAAqB,SAAQ,KAAK;IACjC,QAAQ,CAAC,IAAI,EAAE,wBAAwB;gBAA9B,IAAI,EAAE,wBAAwB,EAAE,OAAO,EAAE,MAAM;CAIrE;AAuBD,OAAO,QAAQ,qBAAqB,CAAC;IACnC,UAAU,OAAO;QAAG,eAAe,EAAE,sBAAsB,CAAA;KAAE;CAC9D;AAsBD,qBAAa,sBAAuB,SAAQ,OAAO;IACjD,MAAM,CAAC,MAAM,iBAAe;IAC5B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAwB;IAC/C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA+B;IACxD,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAc;IAClC,OAAO,CAAC,MAAM,CAAO;gBAET,GAAG,EAAE,OAAO,EAAE,KAAK,GAAE,MAAW,EAAE,OAAO,GAAE;QAAE,GAAG,CAAC,EAAE,MAAM,MAAM,CAAA;KAAO;IAmBlF,QAAQ,IAAI;QAAE,KAAK,EAAE,IAAI,CAAA;KAAE;IAK3B,SAAS,IAAI;QAAE,KAAK,EAAE,OAAO,CAAC;QAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;KAAE;IASnD,MAAM,CAAC,KAAK,EAAE,KAAK,GAAG,SAAS,GAAG,qBAAqB;IAkBvD,OAAO,CAAC,OAAO;IAcf,OAAO,CAAC,YAAY;CAGrB;AAED,eAAO,MAAM,MAAM,gBAAe,CAAA"}
1
+ {"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"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"}
package/lib/service.js CHANGED
@@ -1,3 +1,4 @@
1
+ import { createHash } from 'node:crypto';
1
2
  import { Context, Service } from '@deepseek-ai/cordis';
2
3
  import Schema from '@deepseek-ai/schemastery';
3
4
  import { registerAssistantHealthTool } from './tools.js';
@@ -6,12 +7,41 @@ export const providerIds = [
6
7
  'personalMemory',
7
8
  'personalWiki',
8
9
  'assistantAutomations',
10
+ 'assistantEvaluation',
11
+ 'preferenceLearning',
12
+ 'assistantEvolution',
9
13
  'assistantDelivery',
10
14
  'credentialsKeychain',
11
15
  'eventTriggers',
16
+ 'assistantRecovery',
17
+ 'assistantGrowthExperiments',
18
+ 'pluginControlPlane',
12
19
  'assistantHeartbeat',
13
20
  'larkChannel',
14
21
  ];
22
+ /**
23
+ * Public health ids are stable configuration/report vocabulary. They do not
24
+ * necessarily equal the Cordis service registration name exposed by a
25
+ * provider. Keep that runtime seam explicit so a renamed/public-facing id
26
+ * cannot silently turn an installed provider into `missing`.
27
+ */
28
+ const providerServiceNames = Object.freeze({
29
+ assistantPolicy: 'assistantPolicy',
30
+ personalMemory: 'personalMemory',
31
+ personalWiki: 'personalWiki',
32
+ assistantAutomations: 'assistantAutomations',
33
+ assistantEvaluation: 'assistantEvaluation',
34
+ preferenceLearning: 'assistantPreferenceLearning',
35
+ assistantEvolution: 'assistantEvolution',
36
+ assistantDelivery: 'assistantDelivery',
37
+ credentialsKeychain: 'credentialsKeychain',
38
+ eventTriggers: 'eventTriggers',
39
+ assistantRecovery: 'assistantRecovery',
40
+ assistantGrowthExperiments: 'assistantGrowthExperiments',
41
+ pluginControlPlane: 'pluginControlPlane',
42
+ assistantHeartbeat: 'assistantHeartbeat',
43
+ larkChannel: 'larkChannel',
44
+ });
15
45
  export class AssistantHealthError extends Error {
16
46
  code;
17
47
  constructor(code, message) {
@@ -25,20 +55,196 @@ const configSchema = Schema.object({
25
55
  'assistantPolicy', 'personalMemory', 'personalWiki', 'assistantAutomations',
26
56
  ]),
27
57
  });
58
+ /** Fixed Policy subject used by the non-model supervised-growth runbook. */
59
+ export const HOST_RECOVERY_BACKGROUND_ID = 'dsh-enhanced-assistant-recovery';
60
+ function hostText(value, label, maxBytes, code = 'invalid-input') {
61
+ if (typeof value !== 'string') {
62
+ throw new AssistantHealthError(code, `${label} must be a string`);
63
+ }
64
+ const normalized = value.normalize('NFC').trim();
65
+ if (normalized === '' || Buffer.byteLength(normalized, 'utf8') > maxBytes
66
+ || hasControl(normalized)) {
67
+ throw new AssistantHealthError(code, `${label} is invalid`);
68
+ }
69
+ return normalized;
70
+ }
71
+ function hasControl(value) {
72
+ for (const character of value) {
73
+ const codePoint = character.codePointAt(0);
74
+ if (codePoint <= 0x1f || codePoint === 0x7f)
75
+ return true;
76
+ }
77
+ return false;
78
+ }
28
79
  const keys = {
29
80
  assistantPolicy: { emergencyStop: 'boolean', lastAuditSequence: 'number' },
30
81
  personalMemory: { activeRecords: 'number', removedRecords: 'number', expiredRecords: 'number', pendingProposals: 'number' },
31
82
  personalWiki: { pages: 'number', lintErrors: 'number', lintWarnings: 'number', pendingProposals: 'number' },
32
83
  assistantAutomations: { activeAutomations: 'number', pausedAutomations: 'number', pendingTasks: 'number',
33
- runningTasks: 'number', failedRuns: 'number', unknownRuns: 'number' },
84
+ runningTasks: 'number', failedRuns: 'number', unknownRuns: 'number', pendingEvaluations: 'number',
85
+ retryingEvaluations: 'number', failedEvaluationAttempts: 'number', deadLetterEvaluations: 'number',
86
+ oldestPendingEvaluationAt: 'number', openCircuits: 'optional-number',
87
+ openIncidents: 'optional-number', pendingIncidentAlerts: 'optional-number' },
88
+ assistantEvaluation: { ready: 'boolean', schemaVersion: 'number', outcomes: 'number',
89
+ trustedOutcomes: 'number', selfReportedOutcomes: 'number', externalOutcomes: 'number',
90
+ selfAssessments: 'number', latestOccurredAt: 'optional-number',
91
+ taskProjections: 'optional-number', conflictedTaskProjections: 'optional-number',
92
+ pendingProjections: 'optional-number', retryingProjections: 'optional-number',
93
+ projectionAttempts: 'optional-number', oldestPendingProjectionAt: 'optional-number' },
94
+ preferenceLearning: { ready: 'boolean', enabled: 'boolean', schemaVersion: 'number', signals: 'number',
95
+ hypotheses: 'number', active: 'number', shadow: 'number', proposed: 'number',
96
+ rolledBack: 'number', expired: 'number', lastRecordedAt: 'optional-number' },
97
+ assistantEvolution: { activeRules: 'number', retiredRules: 'number', pendingProposals: 'number',
98
+ conflictedProposals: 'number', trustedEpisodes: 'number', unattributedTrustedEpisodes: 'number',
99
+ lastTrustedEpisodeAt: 'number', lastReconciledAt: 'number', autonomousRollbacks: 'number',
100
+ qualityEligibleEpisodes: 'optional-number', operationalEpisodes: 'optional-number',
101
+ legacyQuarantinedEpisodes: 'optional-number', unattributedQualityEligibleEpisodes: 'optional-number',
102
+ lastQualityEligibleEpisodeAt: 'optional-number' },
34
103
  assistantDelivery: { pendingInbox: 'number', deadLetterInbox: 'number', pendingOutbox: 'number',
35
- deadLetterOutbox: 'number', unknownOutbox: 'number', adapters: 'number' },
104
+ deadLetterOutbox: 'number', unknownOutbox: 'number', adapters: 'number',
105
+ actionableDeadLetterInbox: 'optional-number', resolvedDeadLetterInbox: 'optional-number',
106
+ actionableDeadLetterOutbox: 'optional-number', resolvedDeadLetterOutbox: 'optional-number',
107
+ actionableUnknownOutbox: 'optional-number', resolvedUnknownOutbox: 'optional-number',
108
+ pendingPresentations: 'optional-number', deadPresentations: 'optional-number' },
36
109
  credentialsKeychain: { handles: 'number', activeLeases: 'number', failedLeases: 'number' },
37
110
  eventTriggers: { pendingEvents: 'number', deliveredEvents: 'number', triggersObserved: 'number' },
111
+ assistantRecovery: { runningRuns: 'number', failedRuns: 'number', unknownRuns: 'number',
112
+ incompleteSteps: 'number', staleRuns: 'number', staleSteps: 'number',
113
+ lastSucceededAt: 'number', lastFailedAt: 'number',
114
+ latestProductionStatus: 'optional-production-status',
115
+ consecutiveProductionFailures: 'optional-number', lastProductionRunAt: 'optional-number',
116
+ bootstrapStatus: 'optional-bootstrap-status', bootstrapFailureCode: 'optional-code',
117
+ bootstrapGeneration: 'optional-number', bootstrapAttestationValid: 'optional-boolean',
118
+ bootstrapAttestationSetDigest: 'optional-digest',
119
+ bootstrapUpdatedAt: 'optional-number' },
120
+ assistantGrowthExperiments: { candidates: 'number', readyCandidates: 'number',
121
+ activeExperiments: 'number', rollbackPending: 'number', promoted: 'number',
122
+ traceRevisions: 'number', currentTraces: 'number', exhaustedRollbacks: 'number',
123
+ lastErrorCode: 'optional-code' },
124
+ pluginControlPlane: { gaps: 'number', readyPlans: 'number', activeActivations: 'number',
125
+ failed: 'number', rollbackPending: 'number' },
38
126
  assistantHeartbeat: { active: 'number', paused: 'number', empty: 'number' },
39
127
  larkChannel: { state: ['connected', 'connected-with-gap', 'connecting', 'disabled', 'disconnected', 'reconnecting'],
40
128
  gapGeneration: 'number' },
41
129
  };
130
+ function operationalAssessments(provider, required) {
131
+ if (provider.status !== 'ready')
132
+ return [];
133
+ const metric = (key) => provider.metrics[key];
134
+ const output = [];
135
+ const add = (condition, severity, code, blocksReadiness = false) => {
136
+ if (condition)
137
+ output.push({ severity, code, ...(blocksReadiness ? { blocksReadiness: true } : {}) });
138
+ };
139
+ // Assess only current, actionable state. Lifetime ledger counters such as
140
+ // Automations failedRuns/unknownRuns, failedEvaluationAttempts, conflictedProposals,
141
+ // and failedLeases remain observable metrics but cannot prove that the
142
+ // provider is unhealthy now.
143
+ switch (provider.id) {
144
+ case 'assistantPolicy':
145
+ add(metric('emergencyStop') === true, 'unhealthy', 'emergency-stop', true);
146
+ break;
147
+ case 'personalWiki':
148
+ add(metric('lintErrors') > 0, 'degraded', 'lint-errors');
149
+ break;
150
+ case 'assistantAutomations':
151
+ add(metric('deadLetterEvaluations') > 0, 'degraded', 'evaluation-dead-letter-backlog');
152
+ add(metric('openCircuits') !== undefined
153
+ && metric('openCircuits') > 0, 'degraded', 'open-circuit-backlog');
154
+ add(metric('openIncidents') !== undefined
155
+ && metric('openIncidents') > 0, 'degraded', 'open-incident-backlog');
156
+ add(metric('pendingIncidentAlerts') !== undefined
157
+ && metric('pendingIncidentAlerts') > 0, 'degraded', 'pending-incident-alerts');
158
+ break;
159
+ case 'assistantEvaluation':
160
+ add(metric('retryingProjections') !== undefined
161
+ && metric('retryingProjections') > 0, 'degraded', 'projection-retry-backlog');
162
+ add(metric('conflictedTaskProjections') !== undefined
163
+ && metric('conflictedTaskProjections') > 0, 'degraded', 'evaluation-task-conflicts');
164
+ break;
165
+ case 'assistantRecovery':
166
+ add(metric('latestProductionStatus') === 'failed'
167
+ || metric('latestProductionStatus') === 'unknown', 'degraded', 'incomplete-recovery');
168
+ // A currently running step is not itself unhealthy. Recovery owns the
169
+ // durable deadline/lease and will surface a terminal unknown/failed run;
170
+ // treating every started step as degraded makes final verification
171
+ // self-referential and permanently masks other provider failures.
172
+ add(metric('staleRuns') > 0 || metric('staleSteps') > 0, 'degraded', 'stale-recovery-intent');
173
+ add(metric('bootstrapStatus') === 'running', 'degraded', 'bootstrap-in-progress');
174
+ add(metric('bootstrapStatus') === 'failed', 'unhealthy', 'bootstrap-failed', true);
175
+ add(metric('bootstrapStatus') === 'succeeded'
176
+ && metric('bootstrapAttestationValid') === false, 'unhealthy', 'bootstrap-attestation-invalid', required);
177
+ break;
178
+ case 'assistantGrowthExperiments':
179
+ add(metric('rollbackPending') > 0, 'degraded', 'growth-rollback-pending');
180
+ add(metric('exhaustedRollbacks') > 0, 'unhealthy', 'growth-rollback-exhausted', required);
181
+ add(metric('lastErrorCode') !== undefined, 'degraded', 'growth-runtime-error');
182
+ break;
183
+ case 'pluginControlPlane':
184
+ add(metric('rollbackPending') > 0, 'unhealthy', 'capability-rollback-pending', required);
185
+ break;
186
+ case 'preferenceLearning':
187
+ add(metric('enabled') === false && required, 'unhealthy', 'disabled', true);
188
+ break;
189
+ case 'assistantDelivery': {
190
+ // Delivery v9 distinguishes unresolved work from immutable terminal
191
+ // history. Fall back to v8 raw counters during rolling upgrades.
192
+ const actionableUnknown = metric('actionableUnknownOutbox') ?? metric('unknownOutbox');
193
+ const actionableInbox = metric('actionableDeadLetterInbox') ?? metric('deadLetterInbox');
194
+ const actionableOutbox = metric('actionableDeadLetterOutbox') ?? metric('deadLetterOutbox');
195
+ add(actionableUnknown > 0, 'unhealthy', 'unknown-outbox-backlog');
196
+ add(actionableInbox > 0 || actionableOutbox > 0, 'degraded', 'dead-letter-backlog');
197
+ add(metric('pendingPresentations') !== undefined
198
+ && metric('pendingPresentations') > 0, 'degraded', 'presentation-backlog');
199
+ add(metric('deadPresentations') !== undefined
200
+ && metric('deadPresentations') > 0, 'unhealthy', 'presentation-dead-letter');
201
+ break;
202
+ }
203
+ case 'larkChannel': {
204
+ const state = metric('state');
205
+ add(state === 'connected-with-gap', 'degraded', 'connected-with-gap');
206
+ add(state === 'connecting' || state === 'reconnecting', 'degraded', 'connection-in-progress');
207
+ add(state === 'disconnected', required ? 'unhealthy' : 'degraded', 'disconnected', required);
208
+ add(state === 'disabled' && required, 'unhealthy', 'disabled', true);
209
+ break;
210
+ }
211
+ default:
212
+ break;
213
+ }
214
+ return output;
215
+ }
216
+ function summarize(providers, required) {
217
+ const assessments = [];
218
+ const warnings = [];
219
+ let ready = true;
220
+ let severity = 'healthy';
221
+ const append = (providerId, level, code, warning, blocksReadiness = false) => {
222
+ assessments.push(Object.freeze({ providerId, severity: level, code }));
223
+ warnings.push(warning);
224
+ if (level === 'unhealthy')
225
+ severity = 'unhealthy';
226
+ else if (severity === 'healthy')
227
+ severity = 'degraded';
228
+ if (blocksReadiness)
229
+ ready = false;
230
+ };
231
+ for (const provider of providers) {
232
+ const isRequired = required.has(provider.id);
233
+ if (provider.status === 'missing') {
234
+ if (isRequired)
235
+ append(provider.id, 'unhealthy', 'required-provider-missing', `provider-missing:${provider.id}`, true);
236
+ continue;
237
+ }
238
+ if (provider.status === 'error') {
239
+ append(provider.id, isRequired ? 'unhealthy' : 'degraded', 'health-seam-error', isRequired ? `provider-error:${provider.id}` : `provider-degraded:${provider.id}:health-seam-error`, isRequired);
240
+ continue;
241
+ }
242
+ for (const assessment of operationalAssessments(provider, isRequired)) {
243
+ append(provider.id, assessment.severity, assessment.code, `provider-${assessment.severity}:${provider.id}:${assessment.code}`, assessment.blocksReadiness === true);
244
+ }
245
+ }
246
+ return { ready, severity, assessments, warnings };
247
+ }
42
248
  function metrics(id, value) {
43
249
  if (typeof value !== 'object' || value === null || Array.isArray(value))
44
250
  throw new Error('invalid health payload');
@@ -46,12 +252,43 @@ function metrics(id, value) {
46
252
  const output = {};
47
253
  for (const [key, specification] of Object.entries(keys[id])) {
48
254
  const current = input[key];
49
- if (specification === 'number') {
255
+ if ((specification === 'optional-number' || specification === 'optional-boolean'
256
+ || specification === 'optional-production-status'
257
+ || specification === 'optional-bootstrap-status' || specification === 'optional-code'
258
+ || specification === 'optional-digest')
259
+ && current === undefined)
260
+ continue;
261
+ if (specification === 'number' || specification === 'optional-number') {
50
262
  if (!Number.isSafeInteger(current) || current < 0)
51
263
  throw new Error('invalid numeric health metric');
52
264
  output[key] = current;
53
265
  }
54
- else if (specification === 'boolean') {
266
+ else if (specification === 'optional-production-status') {
267
+ if (typeof current !== 'string'
268
+ || !['none', 'running', 'succeeded', 'failed', 'unknown'].includes(current)) {
269
+ throw new Error('invalid production health status');
270
+ }
271
+ output[key] = current;
272
+ }
273
+ else if (specification === 'optional-bootstrap-status') {
274
+ if (typeof current !== 'string' || !['idle', 'running', 'succeeded', 'failed'].includes(current)) {
275
+ throw new Error('invalid bootstrap health status');
276
+ }
277
+ output[key] = current;
278
+ }
279
+ else if (specification === 'optional-code') {
280
+ if (typeof current !== 'string' || !/^[a-z\d][a-z\d._-]{0,63}$/u.test(current)) {
281
+ throw new Error('invalid health reason code');
282
+ }
283
+ output[key] = current;
284
+ }
285
+ else if (specification === 'optional-digest') {
286
+ if (typeof current !== 'string' || !/^[a-f\d]{64}$/u.test(current)) {
287
+ throw new Error('invalid health digest');
288
+ }
289
+ output[key] = current;
290
+ }
291
+ else if (specification === 'boolean' || specification === 'optional-boolean') {
55
292
  if (typeof current !== 'boolean')
56
293
  throw new Error('invalid boolean health metric');
57
294
  output[key] = current;
@@ -62,6 +299,121 @@ function metrics(id, value) {
62
299
  output[key] = current;
63
300
  }
64
301
  }
302
+ if (id === 'assistantEvolution') {
303
+ const projectionKeys = [
304
+ 'qualityEligibleEpisodes', 'operationalEpisodes', 'legacyQuarantinedEpisodes',
305
+ 'unattributedQualityEligibleEpisodes', 'lastQualityEligibleEpisodeAt',
306
+ ];
307
+ const projectionCount = projectionKeys.filter(key => output[key] !== undefined).length;
308
+ if (projectionCount !== 0 && projectionCount !== projectionKeys.length) {
309
+ throw new Error('incomplete Evolution quality-evidence projection');
310
+ }
311
+ }
312
+ if (id === 'assistantEvaluation') {
313
+ const taskKeys = ['taskProjections', 'conflictedTaskProjections'];
314
+ const taskCount = taskKeys.filter(key => output[key] !== undefined).length;
315
+ if (taskCount !== 0 && taskCount !== taskKeys.length) {
316
+ throw new Error('incomplete Evaluation task projection health');
317
+ }
318
+ if (taskCount === taskKeys.length
319
+ && output.conflictedTaskProjections > output.taskProjections) {
320
+ throw new Error('inconsistent Evaluation task projection health');
321
+ }
322
+ const projectionKeys = ['pendingProjections', 'retryingProjections', 'projectionAttempts'];
323
+ const projectionCount = projectionKeys.filter(key => output[key] !== undefined).length;
324
+ if (projectionCount !== 0 && projectionCount !== projectionKeys.length) {
325
+ throw new Error('incomplete Evaluation projection health');
326
+ }
327
+ if (output.oldestPendingProjectionAt !== undefined
328
+ && (projectionCount === 0 || output.pendingProjections === 0)) {
329
+ throw new Error('inconsistent Evaluation oldest projection health');
330
+ }
331
+ if (projectionCount === projectionKeys.length
332
+ && (output.retryingProjections > output.pendingProjections
333
+ || output.projectionAttempts < output.retryingProjections)) {
334
+ throw new Error('inconsistent Evaluation projection health');
335
+ }
336
+ }
337
+ if (id === 'assistantAutomations') {
338
+ // openCircuits shipped one version earlier and remains independently
339
+ // optional. The later incident/alert projection is atomic: accepting a
340
+ // partial pair would make N and N-1 indistinguishable.
341
+ const projectionKeys = ['openIncidents', 'pendingIncidentAlerts'];
342
+ const projectionCount = projectionKeys.filter(key => output[key] !== undefined).length;
343
+ if (projectionCount !== 0 && projectionCount !== projectionKeys.length) {
344
+ throw new Error('incomplete Automations incident projection');
345
+ }
346
+ }
347
+ if (id === 'assistantDelivery') {
348
+ const projectionKeys = [
349
+ 'actionableDeadLetterInbox', 'resolvedDeadLetterInbox',
350
+ 'actionableDeadLetterOutbox', 'resolvedDeadLetterOutbox',
351
+ 'actionableUnknownOutbox', 'resolvedUnknownOutbox',
352
+ ];
353
+ const projectionCount = projectionKeys.filter(key => output[key] !== undefined).length;
354
+ if (projectionCount !== 0 && projectionCount !== projectionKeys.length) {
355
+ throw new Error('incomplete Delivery resolution projection');
356
+ }
357
+ if (projectionCount === projectionKeys.length) {
358
+ const partitions = [
359
+ ['deadLetterInbox', 'actionableDeadLetterInbox', 'resolvedDeadLetterInbox'],
360
+ ['deadLetterOutbox', 'actionableDeadLetterOutbox', 'resolvedDeadLetterOutbox'],
361
+ ['unknownOutbox', 'actionableUnknownOutbox', 'resolvedUnknownOutbox'],
362
+ ];
363
+ for (const [total, actionable, resolved] of partitions) {
364
+ if (output[actionable] + output[resolved] !== output[total]) {
365
+ throw new Error('inconsistent Delivery resolution projection');
366
+ }
367
+ }
368
+ }
369
+ const presentationKeys = ['pendingPresentations', 'deadPresentations'];
370
+ const presentationCount = presentationKeys.filter(key => output[key] !== undefined).length;
371
+ if (presentationCount !== 0 && presentationCount !== presentationKeys.length) {
372
+ throw new Error('incomplete Delivery presentation projection');
373
+ }
374
+ }
375
+ if (id === 'assistantRecovery') {
376
+ const projectionKeys = [
377
+ 'latestProductionStatus', 'consecutiveProductionFailures', 'lastProductionRunAt',
378
+ ];
379
+ const projectionCount = projectionKeys.filter(key => output[key] !== undefined).length;
380
+ if (projectionCount !== 0 && projectionCount !== projectionKeys.length) {
381
+ throw new Error('incomplete Recovery production projection');
382
+ }
383
+ const bootstrapStatus = output.bootstrapStatus;
384
+ const bootstrapUpdatedAt = output.bootstrapUpdatedAt;
385
+ const bootstrapFailureCode = output.bootstrapFailureCode;
386
+ if ((bootstrapStatus === undefined) !== (bootstrapUpdatedAt === undefined)
387
+ || (bootstrapStatus === 'failed') !== (bootstrapFailureCode !== undefined)) {
388
+ throw new Error('incomplete Recovery bootstrap projection');
389
+ }
390
+ const attestationInputKeys = [
391
+ 'bootstrapGeneration', 'bootstrapAttestationValid',
392
+ 'bootstrapAttestationSetDigest', 'bootstrapAttestations',
393
+ ];
394
+ const attestationInputCount = attestationInputKeys.filter(key => input[key] !== undefined).length;
395
+ if (attestationInputCount !== 0 && attestationInputCount !== attestationInputKeys.length) {
396
+ throw new Error('incomplete Recovery bootstrap attestation projection');
397
+ }
398
+ if (attestationInputCount === attestationInputKeys.length) {
399
+ const attestations = input.bootstrapAttestations;
400
+ if (!Array.isArray(attestations) || attestations.length > 1_000
401
+ || attestations.some((attestation) => {
402
+ if (typeof attestation !== 'object' || attestation === null || Array.isArray(attestation))
403
+ return true;
404
+ const value = attestation;
405
+ return Object.keys(value).sort().join(',')
406
+ !== 'activationNonce,activationPlanDigest,activationState,automationId'
407
+ || typeof value.automationId !== 'string'
408
+ || typeof value.activationNonce !== 'string'
409
+ || !['active', 'paused', 'preview'].includes(String(value.activationState))
410
+ || typeof value.activationPlanDigest !== 'string'
411
+ || !/^[a-f\d]{64}$/u.test(value.activationPlanDigest);
412
+ })) {
413
+ throw new Error('invalid Recovery bootstrap attestations');
414
+ }
415
+ }
416
+ }
65
417
  return Object.freeze(output);
66
418
  }
67
419
  export class AssistantHealthService extends Service {
@@ -100,10 +452,8 @@ export class AssistantHealthService extends Service {
100
452
  readiness() {
101
453
  this.assertActive();
102
454
  const providers = this.collect();
103
- const warnings = providers
104
- .filter(item => this.required.has(item.id) && item.status !== 'ready')
105
- .map(item => `provider-${item.status}:${item.id}`);
106
- return { ready: warnings.length === 0, warnings };
455
+ const summary = summarize(providers, this.required);
456
+ return { ready: summary.ready, warnings: summary.warnings };
107
457
  }
108
458
  report(agent) {
109
459
  this.assertActive();
@@ -111,21 +461,57 @@ export class AssistantHealthService extends Service {
111
461
  if (decision.effect !== 'allow') {
112
462
  throw new AssistantHealthError('policy-denied', `assistant-health policy denied report: ${decision.reasonCode}`);
113
463
  }
464
+ return this.snapshot();
465
+ }
466
+ /**
467
+ * Agent-free, content-free global snapshot for runbook admission and alerts.
468
+ * It is deliberately unscoped and cannot prove a workspace-local mutation.
469
+ * This remains detect-only: it does not expose or invoke any repair method.
470
+ */
471
+ hostGlobalSnapshot(input) {
472
+ this.assertActive();
473
+ if (typeof input !== 'object' || input === null || Array.isArray(input)
474
+ || Object.keys(input).sort().join(',') !== 'operationId,principal') {
475
+ throw new AssistantHealthError('invalid-input', 'Host global health input accepts only principal and operationId');
476
+ }
477
+ const principal = hostText(input.principal, 'principal', 500, 'missing-principal');
478
+ const operationId = hostText(input.operationId, 'operationId', 500);
479
+ const digest = createHash('sha256').update(JSON.stringify([
480
+ HOST_RECOVERY_BACKGROUND_ID,
481
+ principal,
482
+ operationId,
483
+ ])).digest('hex');
484
+ const decision = this.policy.authorize({
485
+ subject: {
486
+ kind: 'background',
487
+ id: HOST_RECOVERY_BACKGROUND_ID,
488
+ principal,
489
+ },
490
+ action: 'inspect',
491
+ resource: { kind: 'tool', id: 'assistant-health:global' },
492
+ context: { initiator: 'background' },
493
+ }, { idempotencyKey: `assistant-health-host:${digest}` });
494
+ if (decision.effect !== 'allow') {
495
+ throw new AssistantHealthError('policy-denied', `assistant-health policy denied Host global snapshot: ${decision.reasonCode}`);
496
+ }
497
+ return this.snapshot();
498
+ }
499
+ snapshot() {
114
500
  const providers = this.collect();
115
- const warnings = providers
116
- .filter(item => this.required.has(item.id) && item.status !== 'ready')
117
- .map(item => `provider-${item.status}:${item.id}`);
501
+ const summary = summarize(providers, this.required);
118
502
  return Object.freeze({
119
- ready: warnings.length === 0,
503
+ ready: summary.ready,
504
+ severity: summary.severity,
120
505
  generatedAt: this.now(),
121
506
  providers: Object.freeze(providers),
122
- warnings: Object.freeze(warnings),
507
+ assessments: Object.freeze(summary.assessments),
508
+ warnings: Object.freeze(summary.warnings),
123
509
  });
124
510
  }
125
511
  collect() {
126
512
  const get = this.context.get.bind(this.context);
127
513
  return providerIds.map(id => {
128
- const provider = get(id);
514
+ const provider = get(providerServiceNames[id]);
129
515
  if (provider === undefined)
130
516
  return Object.freeze({ id, status: 'missing', metrics: Object.freeze({}) });
131
517
  if (typeof provider.health !== 'function')
@@ -1 +1 @@
1
- {"version":3,"file":"service.js","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAEtD,OAAO,MAAM,MAAM,0BAA0B,CAAA;AAE7C,OAAO,EAAE,2BAA2B,EAAE,MAAM,YAAY,CAAA;AAExD,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,iBAAiB;IACjB,gBAAgB;IAChB,cAAc;IACd,sBAAsB;IACtB,mBAAmB;IACnB,qBAAqB;IACrB,eAAe;IACf,oBAAoB;IACpB,aAAa;CACL,CAAA;AAuBV,MAAM,OAAO,oBAAqB,SAAQ,KAAK;IACxB;IAArB,YAAqB,IAA8B,EAAE,OAAe;QAClE,KAAK,CAAC,OAAO,CAAC,CAAA;QADK,SAAI,GAAJ,IAAI,CAA0B;QAEjD,IAAI,CAAC,IAAI,GAAG,sBAAsB,CAAA;IACpC,CAAC;CACF;AAED,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC;IACjC,iBAAiB,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC;QACjE,iBAAiB,EAAE,gBAAgB,EAAE,cAAc,EAAE,sBAAsB;KAC5E,CAAC;CACH,CAAmB,CAAA;AAEpB,MAAM,IAAI,GAAiG;IACzG,eAAe,EAAE,EAAE,aAAa,EAAE,SAAS,EAAE,iBAAiB,EAAE,QAAQ,EAAE;IAC1E,cAAc,EAAE,EAAE,aAAa,EAAE,QAAQ,EAAE,cAAc,EAAE,QAAQ,EAAE,cAAc,EAAE,QAAQ,EAAE,gBAAgB,EAAE,QAAQ,EAAE;IAC3H,YAAY,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,YAAY,EAAE,QAAQ,EAAE,gBAAgB,EAAE,QAAQ,EAAE;IAC3G,oBAAoB,EAAE,EAAE,iBAAiB,EAAE,QAAQ,EAAE,iBAAiB,EAAE,QAAQ,EAAE,YAAY,EAAE,QAAQ;QACtG,YAAY,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE;IACvE,iBAAiB,EAAE,EAAE,YAAY,EAAE,QAAQ,EAAE,eAAe,EAAE,QAAQ,EAAE,aAAa,EAAE,QAAQ;QAC7F,gBAAgB,EAAE,QAAQ,EAAE,aAAa,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE;IAC3E,mBAAmB,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,QAAQ,EAAE,YAAY,EAAE,QAAQ,EAAE;IAC1F,aAAa,EAAE,EAAE,aAAa,EAAE,QAAQ,EAAE,eAAe,EAAE,QAAQ,EAAE,gBAAgB,EAAE,QAAQ,EAAE;IACjG,kBAAkB,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE;IAC3E,WAAW,EAAE,EAAE,KAAK,EAAE,CAAC,WAAW,EAAE,oBAAoB,EAAE,YAAY,EAAE,UAAU,EAAE,cAAc,EAAE,cAAc,CAAC;QACjH,aAAa,EAAE,QAAQ,EAAE;CAC5B,CAAA;AAMD,SAAS,OAAO,CAAC,EAAoB,EAAE,KAAc;IACnD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAA;IAClH,MAAM,KAAK,GAAG,KAAgC,CAAA;IAC9C,MAAM,MAAM,GAAiC,EAAE,CAAA;IAC/C,KAAK,MAAM,CAAC,GAAG,EAAE,aAAa,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;QAC5D,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,CAAA;QAC1B,IAAI,aAAa,KAAK,QAAQ,EAAE,CAAC;YAC/B,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,IAAK,OAAkB,GAAG,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAA;YAC/G,MAAM,CAAC,GAAG,CAAC,GAAG,OAAiB,CAAA;QACjC,CAAC;aAAM,IAAI,aAAa,KAAK,SAAS,EAAE,CAAC;YACvC,IAAI,OAAO,OAAO,KAAK,SAAS;gBAAE,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAA;YAClF,MAAM,CAAC,GAAG,CAAC,GAAG,OAAO,CAAA;QACvB,CAAC;aAAM,CAAC;YACN,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,OAAO,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAA;YACpH,MAAM,CAAC,GAAG,CAAC,GAAG,OAAO,CAAA;QACvB,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;AAC9B,CAAC;AAED,MAAM,OAAO,sBAAuB,SAAQ,OAAO;IACjD,MAAM,CAAC,MAAM,GAAG,YAAY,CAAA;IACX,OAAO,CAAS;IAChB,MAAM,CAAwB;IAC9B,QAAQ,CAA+B;IACvC,GAAG,CAAc;IAC1B,MAAM,GAAG,IAAI,CAAA;IAErB,YAAY,GAAY,EAAE,QAAgB,EAAE,EAAE,UAAkC,EAAE;QAChF,KAAK,CAAC,GAAG,EAAE,iBAAiB,CAAC,CAAA;QAC7B,IAAI,MAAwB,CAAA;QAC5B,IAAI,CAAC;YAAC,MAAM,GAAG,YAAY,CAAC,KAAK,CAAqB,CAAA;QAAC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACtE,MAAM,IAAI,KAAK,CAAC,4CAA4C,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAA;QAChG,CAAC;QACD,IAAI,IAAI,GAAG,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,iBAAiB,CAAC,MAAM,EAAE,CAAC;YAC/E,MAAM,IAAI,KAAK,CAAC,0DAA0D,CAAC,CAAA;QAC7E,CAAC;QACD,MAAM,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC,iBAAiB,CAAuC,CAAA;QAC/E,IAAI,MAAM,KAAK,SAAS;YAAE,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAA;QAClG,IAAI,CAAC,OAAO,GAAG,GAAG,CAAA;QAClB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;QACpB,IAAI,CAAC,QAAQ,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAA;QACjD,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAA;QAClC,GAAG,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAC,EAAE,CAAC,2BAA2B,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAA;QAC9E,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,MAAM,GAAG,KAAK,CAAA,CAAC,CAAC,EAAE,0BAA0B,CAAC,CAAA;IAC7E,CAAC;IAED,QAAQ;QACN,IAAI,CAAC,YAAY,EAAE,CAAA;QACnB,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAA;IACxB,CAAC;IAED,SAAS;QACP,IAAI,CAAC,YAAY,EAAE,CAAA;QACnB,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,EAAE,CAAA;QAChC,MAAM,QAAQ,GAAG,SAAS;aACvB,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,MAAM,KAAK,OAAO,CAAC;aACrE,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,YAAY,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC,CAAA;QACpD,OAAO,EAAE,KAAK,EAAE,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,QAAQ,EAAE,CAAA;IACnD,CAAC;IAED,MAAM,CAAC,KAAwB;QAC7B,IAAI,CAAC,YAAY,EAAE,CAAA;QACnB,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,kBAAkB,EAAE,CAAC,CAAA;QACvG,IAAI,QAAQ,CAAC,MAAM,KAAK,OAAO,EAAE,CAAC;YAChC,MAAM,IAAI,oBAAoB,CAAC,eAAe,EAAE,0CAA0C,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAA;QAClH,CAAC;QACD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,EAAE,CAAA;QAChC,MAAM,QAAQ,GAAG,SAAS;aACvB,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,MAAM,KAAK,OAAO,CAAC;aACrE,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,YAAY,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC,CAAA;QACpD,OAAO,MAAM,CAAC,MAAM,CAAC;YACnB,KAAK,EAAE,QAAQ,CAAC,MAAM,KAAK,CAAC;YAC5B,WAAW,EAAE,IAAI,CAAC,GAAG,EAAE;YACvB,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC;YACnC,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAwB;SACzD,CAAC,CAAA;IACJ,CAAC;IAEO,OAAO;QACb,MAAM,GAAG,GAAI,IAAI,CAAC,OAAqD,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QAC9F,OAAO,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;YAC1B,MAAM,QAAQ,GAAG,GAAG,CAAC,EAAE,CAA2C,CAAA;YAClE,IAAI,QAAQ,KAAK,SAAS;gBAAE,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,SAAkB,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAA;YAChH,IAAI,OAAO,QAAQ,CAAC,MAAM,KAAK,UAAU;gBAAE,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,OAAgB,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAA;YAC7H,IAAI,CAAC;gBACH,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,OAAgB,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAA;YACjG,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,OAAgB,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAA;YACpF,CAAC;QACH,CAAC,CAAC,CAAA;IACJ,CAAC;IAEO,YAAY;QAClB,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,MAAM,IAAI,oBAAoB,CAAC,UAAU,EAAE,sCAAsC,CAAC,CAAA;IACtG,CAAC;;AAGH,MAAM,CAAC,MAAM,MAAM,GAAG,YAAY,CAAA"}
1
+ {"version":3,"file":"service.js","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAElD,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAA;AAE1D,wBAAgB,2BAA2B,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,sBAAsB,GAAG,IAAI,CA8B/F"}
1
+ {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAElD,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAA;AAE1D,wBAAgB,2BAA2B,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,sBAAsB,GAAG,IAAI,CAwC/F"}
package/lib/tools.js CHANGED
@@ -7,7 +7,15 @@ export function registerAssistantHealthTool(ctx, service) {
7
7
  output: {
8
8
  schema: { type: 'object', additionalProperties: false, properties: {
9
9
  ready: { type: 'boolean', required: true }, generatedAt: { type: 'integer', required: true },
10
+ severity: { type: 'string', required: true },
10
11
  warnings: { type: 'array', required: true, items: { type: 'string' } },
12
+ assessments: { type: 'array', required: true, items: {
13
+ type: 'object', additionalProperties: false, properties: {
14
+ providerId: { type: 'string', required: true },
15
+ severity: { type: 'string', required: true },
16
+ code: { type: 'string', required: true },
17
+ },
18
+ } },
11
19
  providers: { type: 'array', required: true, items: { type: 'object', additionalProperties: false, properties: {
12
20
  id: { type: 'string', required: true }, status: { type: 'string', required: true },
13
21
  metrics: { type: 'object', required: true, additionalProperties: true, properties: {} },
@@ -19,8 +27,10 @@ export function registerAssistantHealthTool(ctx, service) {
19
27
  const report = service.report(exec.agent);
20
28
  return {
21
29
  ready: report.ready,
30
+ severity: report.severity,
22
31
  generatedAt: report.generatedAt,
23
32
  warnings: [...report.warnings],
33
+ assessments: report.assessments.map(assessment => ({ ...assessment })),
24
34
  providers: report.providers.map(provider => ({
25
35
  id: provider.id,
26
36
  status: provider.status,
package/lib/tools.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"tools.js","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAA;AAGnD,MAAM,UAAU,2BAA2B,CAAC,GAAY,EAAE,OAA+B;IACvF,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC;QAC5B,IAAI,EAAE,kBAAkB;QACxB,WAAW,EAAE,+FAA+F;QAC5G,UAAU,EAAE,EAAE;QACd,MAAM,EAAE;YACN,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,oBAAoB,EAAE,KAAK,EAAE,UAAU,EAAE;oBACjE,KAAK,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,WAAW,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE;oBAC5F,QAAQ,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE;oBACtE,SAAS,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,oBAAoB,EAAE,KAAK,EAAE,UAAU,EAAE;gCAC5G,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE;gCAClF,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,oBAAoB,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE;6BACxF,EAAE,EAAE;iBACN,EAAE;YACH,MAAM,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;SAC1E;QACD,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI;YACvB,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;YACzC,OAAO;gBACL,KAAK,EAAE,MAAM,CAAC,KAAK;gBACnB,WAAW,EAAE,MAAM,CAAC,WAAW;gBAC/B,QAAQ,EAAE,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC;gBAC9B,SAAS,EAAE,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;oBAC3C,EAAE,EAAE,QAAQ,CAAC,EAAE;oBACf,MAAM,EAAE,QAAQ,CAAC,MAAM;oBACvB,OAAO,EAAE,EAAE,GAAG,QAAQ,CAAC,OAAO,EAAE;iBACjC,CAAC,CAAC;aACJ,CAAA;QACH,CAAC;KACF,CAAC,CAAC,CAAA;AACL,CAAC"}
1
+ {"version":3,"file":"tools.js","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"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"}
package/lib/version.d.ts CHANGED
@@ -1,2 +1,2 @@
1
- export declare const version = "0.1.6";
1
+ export declare const version = "0.1.12";
2
2
  //# sourceMappingURL=version.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,OAAO,UAAU,CAAA"}
1
+ {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,OAAO,WAAW,CAAA"}
package/lib/version.js CHANGED
@@ -1,2 +1,2 @@
1
- export const version = '0.1.6';
1
+ export const version = '0.1.12';
2
2
  //# sourceMappingURL=version.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,OAAO,GAAG,OAAO,CAAA"}
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,OAAO,GAAG,QAAQ,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dsh-enhanced/assistant-health",
3
- "version": "0.1.6",
3
+ "version": "0.1.12",
4
4
  "description": "Policy-gated, content-free health and readiness aggregation for DSH assistant services.",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -71,7 +71,8 @@
71
71
  "@types/node": "22.20.0",
72
72
  "typescript": "6.0.3",
73
73
  "vitest": "4.1.8",
74
- "@dsh-enhanced/assistant-policy": "0.1.6"
74
+ "@dsh-enhanced/assistant-policy": "0.1.12",
75
+ "@dsh-enhanced/preference-learning": "0.1.12"
75
76
  },
76
77
  "scripts": {
77
78
  "build": "tsc -p tsconfig.build.json",