@sensigo/realm-mcp 0.27.0 → 0.29.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/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/protocol/generator.js +1 -1
- package/dist/protocol/generator.js.map +1 -1
- package/dist/server.js +1 -1
- package/dist/tools/get-run-state.d.ts +24 -6
- package/dist/tools/get-run-state.d.ts.map +1 -1
- package/dist/tools/get-run-state.js +34 -7
- package/dist/tools/get-run-state.js.map +1 -1
- package/package.json +2 -2
package/dist/index.d.ts
CHANGED
|
@@ -3,5 +3,5 @@ export type { RealmMcpServerOptions } from './server.js';
|
|
|
3
3
|
export { generateProtocol } from './protocol/generator.js';
|
|
4
4
|
export type { WorkflowProtocol, ProtocolStep } from './protocol/generator.js';
|
|
5
5
|
export { JsonTraceBufferStore } from './json-trace-buffer-store.js';
|
|
6
|
-
export declare const VERSION = "0.
|
|
6
|
+
export declare const VERSION = "0.29.0";
|
|
7
7
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.js
CHANGED
|
@@ -4,5 +4,5 @@ export { generateProtocol } from './protocol/generator.js';
|
|
|
4
4
|
// issue #107: exported so the operator run-purge CLI command (packages/cli) can construct one
|
|
5
5
|
// and register it as a PerRunArtifactStore alongside JsonFileStore/FailedAttemptStore.
|
|
6
6
|
export { JsonTraceBufferStore } from './json-trace-buffer-store.js';
|
|
7
|
-
export const VERSION = '0.
|
|
7
|
+
export const VERSION = '0.29.0';
|
|
8
8
|
//# sourceMappingURL=index.js.map
|
|
@@ -10,7 +10,7 @@ const ERROR_HANDLING = {
|
|
|
10
10
|
resolve_precondition: 'A prerequisite step has not completed. The error includes which precondition failed and what step to call. Follow the suggestion.',
|
|
11
11
|
stop: 'A critical error occurred. Report it to the user and do not attempt any further steps.',
|
|
12
12
|
wait_for_human: 'An external service is unavailable and cannot be retried automatically (e.g. network unreachable, upstream server error). Show the error to the user and wait for them to confirm the issue is resolved — the run cannot continue until the external dependency is back.',
|
|
13
|
-
wait_and_proceed: 'The upstream service returned a rate-limit response. retry_after in the envelope gives the number of seconds to wait. After that delay, follow next_actions without human involvement — the step has already failed; if a recovery branch exists it will appear in next_actions. This action only appears when engine-level retry is not configured for the step; when retry is configured, the engine retries internally and surfaces STEP_RETRY_EXHAUSTED (report_to_user) on exhaustion.',
|
|
13
|
+
wait_and_proceed: 'The upstream service returned a rate-limit response. retry_after in the envelope gives the number of seconds to wait. After that delay, follow next_actions without human involvement — the step has already failed; if a recovery branch exists it will appear in next_actions. This action only appears when engine-level retry is not configured for the step; when retry is configured, the engine retries internally and surfaces STEP_RETRY_EXHAUSTED (report_to_user) on exhaustion of attempts or total-time budget.',
|
|
14
14
|
};
|
|
15
15
|
/**
|
|
16
16
|
* Generates the full agent protocol briefing from a WorkflowDefinition.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generator.js","sourceRoot":"","sources":["../../src/protocol/generator.ts"],"names":[],"mappings":"AAyCA,MAAM,aAAa,GAAG;IACpB,8DAA8D;IAC9D,2NAA2N;IAC3N,2DAA2D;IAC3D,kFAAkF;CACnF,CAAC;AAEF,MAAM,cAAc,GAA2B;IAC7C,aAAa,EACX,uIAAuI;IACzI,cAAc,EACZ,qHAAqH;IACvH,oBAAoB,EAClB,mIAAmI;IACrI,IAAI,EAAE,wFAAwF;IAC9F,cAAc,EACZ,0QAA0Q;IAC5Q,gBAAgB,EACd,
|
|
1
|
+
{"version":3,"file":"generator.js","sourceRoot":"","sources":["../../src/protocol/generator.ts"],"names":[],"mappings":"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"}
|
package/dist/server.js
CHANGED
|
@@ -42,7 +42,7 @@ export { createDefaultRegistry };
|
|
|
42
42
|
export function createRealmMcpServer(options) {
|
|
43
43
|
const server = new McpServer({
|
|
44
44
|
name: 'realm',
|
|
45
|
-
version: '0.
|
|
45
|
+
version: '0.29.0',
|
|
46
46
|
});
|
|
47
47
|
// When no registry is provided, use the default registry that pre-registers built-in
|
|
48
48
|
// adapters. When a registry is provided, the caller is responsible for its contents.
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
2
|
-
import { JsonWorkflowStore, type RunPhase, type NextAction, type ClaimState, type SkipDetail, type RunStore } from '@sensigo/realm';
|
|
2
|
+
import { JsonWorkflowStore, type RunPhase, type NextAction, type ClaimState, type SkipDetail, type RunStore, type RunHealthFinding } from '@sensigo/realm';
|
|
3
3
|
export interface HandleRunStateStores {
|
|
4
4
|
/** Any `RunStore` implementation (issue #188, PR-1 — was `JsonFileStore`-only). */
|
|
5
5
|
runStore?: RunStore;
|
|
@@ -94,11 +94,29 @@ export interface RunStateSummary {
|
|
|
94
94
|
*/
|
|
95
95
|
skip_details?: Record<string, SkipDetail>;
|
|
96
96
|
/**
|
|
97
|
-
*
|
|
98
|
-
*
|
|
99
|
-
*
|
|
100
|
-
*
|
|
101
|
-
*
|
|
97
|
+
* Typed run-health findings (issue #221) — present only when non-empty. Computed by
|
|
98
|
+
* `classifyRunHealth`, the SAME shared predicate the three READ surfaces (`get_run_state`,
|
|
99
|
+
* `realm run list --stuck`, `realm run inspect`) derive from, so none of them can silently drift
|
|
100
|
+
* from another about what "wedged" or "idle" means. (`realm run reclaim` reads the SAME
|
|
101
|
+
* underlying record facts — settle sets, capability_blocks, reclaim-audit evidence — via its
|
|
102
|
+
* own independent discriminator, `classifyNoActiveClaim`; it does not call this function.) This
|
|
103
|
+
* is the CANONICAL SUPERSET of `stuck_claims`/`capability_blocks` above — those two legacy
|
|
104
|
+
* arrays are KEPT for backward compatibility (existing consumers), but a new consumer should
|
|
105
|
+
* prefer `run_health`. Never alters `next_actions_status` (fine-maps-to-coarse, never the
|
|
106
|
+
* reverse — the systemd invariant): a wedge is surfaced here even when the aggregate status
|
|
107
|
+
* cannot show it (notably a `gate_waiting` run, whose status MUST stay `awaiting_human`).
|
|
108
|
+
*/
|
|
109
|
+
run_health?: RunHealthFinding[];
|
|
110
|
+
/**
|
|
111
|
+
* Advisory diagnostics for this response (issue #119: WARN-never-gate — never a throw, never a
|
|
112
|
+
* behavior change). Independent sources, any subset may be present:
|
|
113
|
+
* - Store-fidelity caveats (issue #188): the configured run store does NOT declare it persists
|
|
114
|
+
* a load-bearing field this response depends on (`capability_blocks`) or the per-claim
|
|
115
|
+
* liveness clock (`claims`, via `persistsClaims`) — so a field reading absent/empty may be a
|
|
116
|
+
* store limitation rather than genuine absence (absence ≡ Unknown, never healthy-false).
|
|
117
|
+
* - A run-health presence line (issue #221): fires whenever `run_health` above is non-empty, so
|
|
118
|
+
* a consumer reading only `warnings` (not `run_health`) still learns something needs
|
|
119
|
+
* attention.
|
|
102
120
|
*/
|
|
103
121
|
warnings?: string[];
|
|
104
122
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-run-state.d.ts","sourceRoot":"","sources":["../../src/tools/get-run-state.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,EAEL,iBAAiB,
|
|
1
|
+
{"version":3,"file":"get-run-state.d.ts","sourceRoot":"","sources":["../../src/tools/get-run-state.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,EAEL,iBAAiB,EASjB,KAAK,QAAQ,EACb,KAAK,UAAU,EACf,KAAK,UAAU,EACf,KAAK,UAAU,EACf,KAAK,QAAQ,EAEb,KAAK,gBAAgB,EACtB,MAAM,gBAAgB,CAAC;AAGxB,MAAM,WAAW,oBAAoB;IACnC,mFAAmF;IACnF,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB;;;;OAIG;IACH,aAAa,CAAC,EAAE,iBAAiB,CAAC;CACnC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,MAAM,iBAAiB,GACzB,IAAI,GACJ,cAAc,GACd,gBAAgB,GAChB,qBAAqB,GACrB,kBAAkB,GAClB,aAAa,GACb,mBAAmB,GACnB,uBAAuB,CAAC;AAE5B,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,QAAQ,CAAC;IACpB,cAAc,EAAE,OAAO,CAAC;IACxB,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,YAAY,EAAE,OAAO,gBAAgB,EAAE,WAAW,GAAG,SAAS,CAAC;IAC/D,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,aAAa,CAAC,EAAE;QACd,OAAO,EAAE,MAAM,CAAC;QAChB,UAAU,CAAC,EAAE,KAAK,CAAC;YAAE,SAAS,EAAE,MAAM,CAAC;YAAC,cAAc,EAAE,OAAO,CAAC;YAAC,MAAM,EAAE,OAAO,CAAA;SAAE,CAAC,CAAC;QACpF,aAAa,CAAC,EAAE,MAAM,CAAC;KACxB,CAAC;IACF;;;;OAIG;IACH,YAAY,EAAE,UAAU,EAAE,CAAC;IAC3B,8FAA8F;IAC9F,mBAAmB,EAAE,iBAAiB,CAAC;IACvC;;;;;;OAMG;IACH,YAAY,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,UAAU,CAAA;KAAE,CAAC,CAAC;IAC1D;;;;;;OAMG;IACH,iBAAiB,CAAC,EAAE,KAAK,CAAC;QACxB,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE;YAAE,IAAI,EAAE,SAAS,GAAG,SAAS,CAAC;YAAC,IAAI,EAAE,MAAM,CAAA;SAAE,CAAC;QAC3D,IAAI,EAAE,MAAM,CAAC;KACd,CAAC,CAAC;IACH;;;;OAIG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAC1C;;;;;;;;;;;;OAYG;IACH,UAAU,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAChC;;;;;;;;;;OAUG;IACH,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AAED;;;GAGG;AACH,wBAAsB,iBAAiB,CACrC,IAAI,EAAE;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,EACxB,MAAM,CAAC,EAAE,oBAAoB,GAC5B,OAAO,CAAC,eAAe,CAAC,CAsJ1B;AAED,0DAA0D;AAC1D,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,CAAC,EAAE,oBAAoB,GAAG,IAAI,CAuCxF"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// get-run-state tool — returns the current state summary of a run.
|
|
2
2
|
import { z } from 'zod';
|
|
3
|
-
import { JsonFileStore, WorkflowError, resolvePreExecutionAgentAction, buildNextActions, findEligibleSteps, classifyInProgressClaims, findCapabilityBlockedSteps, persistsField, } from '@sensigo/realm';
|
|
3
|
+
import { JsonFileStore, WorkflowError, resolvePreExecutionAgentAction, buildNextActions, findEligibleSteps, classifyInProgressClaims, findCapabilityBlockedSteps, classifyRunHealth, persistsField, } from '@sensigo/realm';
|
|
4
4
|
import { sseJsonStringify } from '../sse-json.js';
|
|
5
5
|
/**
|
|
6
6
|
* Business logic for the get_run_state tool.
|
|
@@ -18,17 +18,30 @@ export async function handleGetRunState(args, stores) {
|
|
|
18
18
|
// blocked step look identical to "no blocks" ([] either way). Advisory only: this NEVER changes
|
|
19
19
|
// capabilityBlocks/nextActionsStatus above, it only tells the consumer the read may be a store
|
|
20
20
|
// limitation rather than a real absence.
|
|
21
|
-
const
|
|
21
|
+
const warnings = [];
|
|
22
22
|
if (!persistsField(runStore, 'capability_blocks')) {
|
|
23
|
-
|
|
23
|
+
warnings.push("this run store does not persist 'capability_blocks' — capability-block state is " +
|
|
24
24
|
'unavailable and not authoritative (an empty result may mean "no blocks" or "this ' +
|
|
25
25
|
'store cannot report blocks at all").');
|
|
26
26
|
}
|
|
27
|
+
// issue #221: same pattern, for the per-claim liveness clock — NOT a LoadBearingRunRecordField
|
|
28
|
+
// (persistsField would be the wrong gate; `claims` is keyed off the store's own `persistsClaims`
|
|
29
|
+
// boolean instead, per RunStore's own contract). Absence ≡ Unknown, never healthy-false: a store
|
|
30
|
+
// that cannot report claim liveness makes stale_claim/wedged_gate_sibling findings (and the
|
|
31
|
+
// legacy stuck_claims array) unavailable, not falsely empty.
|
|
32
|
+
if (runStore.persistsClaims !== true) {
|
|
33
|
+
warnings.push("this run store does not persist 'claims' — claim-liveness state is unavailable and not " +
|
|
34
|
+
'authoritative (an empty result may mean "no wedge" or "this store cannot report claim ' +
|
|
35
|
+
'liveness at all").');
|
|
36
|
+
}
|
|
27
37
|
// Compute next_actions + diagnostic status (read-only). Precedence:
|
|
28
38
|
// terminal → skipped_terminal; gate open → awaiting_human; no/unresolved workflow →
|
|
29
39
|
// workflow_unresolved; else buildNextActions/findEligibleSteps → ok | auto_pending.
|
|
40
|
+
// `definition` is hoisted (issue #221) so classifyRunHealth below can reuse it when resolved —
|
|
41
|
+
// scoping/resolution logic here is otherwise UNCHANGED.
|
|
30
42
|
let nextActions = [];
|
|
31
43
|
let nextActionsStatus;
|
|
44
|
+
let definition;
|
|
32
45
|
if (run.terminal_state) {
|
|
33
46
|
nextActionsStatus = 'skipped_terminal';
|
|
34
47
|
}
|
|
@@ -36,9 +49,10 @@ export async function handleGetRunState(args, stores) {
|
|
|
36
49
|
nextActionsStatus = 'awaiting_human';
|
|
37
50
|
}
|
|
38
51
|
else {
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
52
|
+
definition =
|
|
53
|
+
stores?.workflowStore !== undefined
|
|
54
|
+
? await stores.workflowStore.get(run.workflow_id).catch(() => undefined)
|
|
55
|
+
: undefined;
|
|
42
56
|
if (definition === undefined) {
|
|
43
57
|
nextActionsStatus = 'workflow_unresolved';
|
|
44
58
|
}
|
|
@@ -88,6 +102,18 @@ export async function handleGetRunState(args, stores) {
|
|
|
88
102
|
: classifyInProgressClaims(run)
|
|
89
103
|
.filter((c) => c.state !== 'healthy' && c.step !== run.pending_gate?.step_name)
|
|
90
104
|
.map((c) => ({ step: c.step, state: c.state }));
|
|
105
|
+
// issue #221: the SAME shared classifyRunHealth predicate the three READ surfaces (get_run_state,
|
|
106
|
+
// list --stuck, inspect) derive from — computed definition-aware when the workflow resolved
|
|
107
|
+
// above (adds eligible_steps evidence to any never_claimed_idle finding), definition-free
|
|
108
|
+
// otherwise (gate / workflow_unresolved paths). Terminal guard mirrors stuck_claims/
|
|
109
|
+
// capability_blocks: a sealed run surfaces nothing. `next_actions_status` above is computed and
|
|
110
|
+
// finalized BEFORE this line runs — nothing below this point may write back to it.
|
|
111
|
+
const runHealth = run.terminal_state
|
|
112
|
+
? []
|
|
113
|
+
: classifyRunHealth(run, definition !== undefined ? { definition } : {});
|
|
114
|
+
if (runHealth.length > 0) {
|
|
115
|
+
warnings.push(`this run has ${runHealth.length} active run-health finding(s) — see 'run_health' for detail.`);
|
|
116
|
+
}
|
|
91
117
|
return {
|
|
92
118
|
run_id: run.id,
|
|
93
119
|
workflow_id: run.workflow_id,
|
|
@@ -119,7 +145,8 @@ export async function handleGetRunState(args, stores) {
|
|
|
119
145
|
...(run.skip_details !== undefined && Object.keys(run.skip_details).length > 0
|
|
120
146
|
? { skip_details: run.skip_details }
|
|
121
147
|
: {}),
|
|
122
|
-
...(
|
|
148
|
+
...(runHealth.length > 0 ? { run_health: runHealth } : {}),
|
|
149
|
+
...(warnings.length > 0 ? { warnings } : {}),
|
|
123
150
|
};
|
|
124
151
|
}
|
|
125
152
|
/** Registers the get_run_state MCP tool on the server. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-run-state.js","sourceRoot":"","sources":["../../src/tools/get-run-state.ts"],"names":[],"mappings":"AAAA,mEAAmE;AACnE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EACL,aAAa,EAEb,aAAa,EACb,8BAA8B,EAC9B,gBAAgB,EAChB,iBAAiB,EACjB,wBAAwB,EACxB,0BAA0B,EAC1B,aAAa,
|
|
1
|
+
{"version":3,"file":"get-run-state.js","sourceRoot":"","sources":["../../src/tools/get-run-state.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sensigo/realm-mcp",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.29.0",
|
|
4
4
|
"publishConfig": {
|
|
5
5
|
"access": "public"
|
|
6
6
|
},
|
|
@@ -46,7 +46,7 @@
|
|
|
46
46
|
},
|
|
47
47
|
"dependencies": {
|
|
48
48
|
"@modelcontextprotocol/sdk": "1.29.0",
|
|
49
|
-
"@sensigo/realm": "^0.
|
|
49
|
+
"@sensigo/realm": "^0.29.0",
|
|
50
50
|
"zod": "^3.25.7"
|
|
51
51
|
},
|
|
52
52
|
"devDependencies": {
|