@secondlayer/sentinel 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/mcp.js CHANGED
@@ -20646,8 +20646,10 @@ function intentView(i) {
20646
20646
  kind: i.kind,
20647
20647
  on: i.on,
20648
20648
  alertLevel: i.alertLevel,
20649
+ coverage: i.coverage,
20649
20650
  summary: intentLine(i),
20650
20651
  members: i.members,
20652
+ ...i.alsoChecks ? { alsoChecks: i.alsoChecks } : {},
20651
20653
  status: subjectStatus(i.rows),
20652
20654
  mutedUntil: i.rows.map((w) => mutedUntilOf(w)).find(Boolean) ?? null,
20653
20655
  rules: i.rows.map((w) => ({
@@ -20857,7 +20859,7 @@ function buildTools(client) {
20857
20859
  run: async (a) => a.confirm === true ? client.testsFromRepo(a.planId) : paidRun("Run the Clarinet suite from this pre-launch plan's repo in the airgapped sandbox.")
20858
20860
  },
20859
20861
  list_watches: {
20860
- description: "What a plan watches, as intent watches (Money out per token, Control changes, one per finding, the fns you added): on or off, the threshold or summary, the fns covered, each rule in token units, any mute, and the subject name the other watch tools take.",
20862
+ description: "What a plan watches, as intent watches (Money out per token, Control changes, one per finding, the fns you added): on or off, the threshold or summary, the fns covered, what it can see (coverage: direct-calls means a call made from another contract isn't visible yet), each rule in token units, any mute, and the subject name the other watch tools take.",
20861
20863
  input: { planId },
20862
20864
  run: async (a) => {
20863
20865
  const ctx = await watchContext(client, a.planId);
@@ -21041,7 +21043,7 @@ async function runTool(tool, args) {
21041
21043
  }
21042
21044
  }
21043
21045
  function buildServer(client) {
21044
- const server = new McpServer({ name: "sentinel", version: "0.2.0" });
21046
+ const server = new McpServer({ name: "sentinel", version: "0.2.1" });
21045
21047
  for (const [name, tool] of Object.entries(buildTools(client))) {
21046
21048
  server.registerTool(name, { description: tool.description, inputSchema: tool.input }, (args) => runTool(tool, args));
21047
21049
  }
@@ -184,6 +184,8 @@ export type IntentWatch<R = StoredWatch & {
184
184
  summary: string;
185
185
  on: boolean;
186
186
  alertLevel: "urgent" | "normal";
187
+ /** What it can see: `direct-calls` (a call another contract makes isn't visible yet) or `all-calls`. */
188
+ coverage: "direct-calls" | "all-calls";
187
189
  watchIds: string[];
188
190
  rows: R[];
189
191
  members: {
@@ -206,6 +208,12 @@ export type IntentWatch<R = StoredWatch & {
206
208
  title: string;
207
209
  index: number | null;
208
210
  };
211
+ /** Control changes: the state only its members write, read every `everyMinutes` between calls. */
212
+ alsoChecks?: {
213
+ vars: string[];
214
+ maps: string[];
215
+ everyMinutes: number;
216
+ };
209
217
  };
210
218
  /** The stored rows behind a list of intent watches, in order. */
211
219
  export declare const rowsOf: <R>(intents: {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@secondlayer/sentinel",
3
- "version": "0.2.0",
3
+ "version": "0.2.1",
4
4
  "description": "Sentinel from a terminal or an agent: the CLI, an MCP server and a client for your Stacks contract monitoring.",
5
5
  "license": "MIT",
6
6
  "repository": "https://runsentinel.app/docs",