sentinelayer-cli 0.19.0 → 0.20.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/package.json +1 -1
- package/src/commands/ai/identity-lifecycle.js +14 -2
- package/src/commands/mcp.js +60 -0
- package/src/commands/session.js +1255 -25
- package/src/legacy-cli.js +16 -11
- package/src/mcp/registry.js +151 -0
- package/src/mcp/session-stdio-server.js +977 -0
- package/src/scan/generator.js +3 -2
- package/src/session/agent-registry.js +118 -0
- package/src/session/checkpoints.js +71 -1
- package/src/session/coordination-guidance.js +3 -2
- package/src/session/listener.js +302 -68
- package/src/session/pricing-ledger.js +34 -4
- package/src/session/recap.js +4 -2
- package/src/session/sync.js +278 -0
- package/src/session/transcript.js +86 -36
- package/src/session/usage.js +5 -5
- package/src/session/wake/claude.js +175 -0
- package/src/session/wake/codex.js +394 -0
- package/src/session/wake/cursor-store.js +69 -0
- package/src/session/wake/dispatcher.js +184 -0
- package/src/session/wake/pump.js +135 -0
- package/src/session/wake/registry.js +80 -0
- package/src/session/wake/resolve-target.js +146 -0
- package/src/session/wake/sentid.js +103 -0
package/src/legacy-cli.js
CHANGED
|
@@ -194,6 +194,7 @@ function parseCliArgs(argv) {
|
|
|
194
194
|
}
|
|
195
195
|
|
|
196
196
|
function printUsage() {
|
|
197
|
+
const writeUsageLine = (line = "") => process.stdout.write(`${line}\n`);
|
|
197
198
|
console.log(`sentinelayer-cli v${CLI_VERSION}`);
|
|
198
199
|
console.log("");
|
|
199
200
|
console.log("Usage: sl <command> [options]");
|
|
@@ -223,8 +224,11 @@ function printUsage() {
|
|
|
223
224
|
console.log(" sl session action <id> working_on --target-sequence <n> Claim work on a message");
|
|
224
225
|
console.log(" sl session reply <id> <seq> \"msg\" Thread a response under a message");
|
|
225
226
|
console.log(" sl session comment <id> <seq> \"msg\" Alias for threaded reply");
|
|
226
|
-
console.log(" sl session
|
|
227
|
-
console.log(" sl session
|
|
227
|
+
console.log(" sl session read <id> --remote --agent <id> Read stream events and auto-record views");
|
|
228
|
+
console.log(" sl session view <id> <seq> Manually backfill a read receipt");
|
|
229
|
+
console.log(" sl session recap now <id> --remote --json Summarize current owners, locks, and work");
|
|
230
|
+
console.log(" sl session daemon --session <id> Run Senti recaps/checkpoints for long rooms");
|
|
231
|
+
console.log(" sl session read <id> --tail 20 Read local session stream events");
|
|
228
232
|
console.log(" sl session status <id> --json Show session health, agents, runs, leases");
|
|
229
233
|
console.log(" sl session leave <id> Leave a session");
|
|
230
234
|
console.log(" sl session list --json List active sessions");
|
|
@@ -253,13 +257,13 @@ function printUsage() {
|
|
|
253
257
|
console.log(" sl audit frontend --path . --json Jules frontend audit (--stream for NDJSON, --url for runtime)");
|
|
254
258
|
console.log(" sl audit security --path . --json Security-focused audit");
|
|
255
259
|
console.log("");
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
260
|
+
writeUsageLine("AIdenID (Identity Testing):");
|
|
261
|
+
writeUsageLine(" sl ai identity provision --execute Provision ephemeral test email (auto-credentials after login)");
|
|
262
|
+
writeUsageLine(" sl ai identity wait-for-otp <id> Poll for OTP extraction from provisioned email");
|
|
263
|
+
writeUsageLine(" sl ai identity list List tracked identities");
|
|
264
|
+
writeUsageLine(" sl ai identity lineage <id> Show identity parent/child tree");
|
|
265
|
+
writeUsageLine(" sl ai identity revoke <id> Revoke a provisioned identity");
|
|
266
|
+
writeUsageLine("");
|
|
263
267
|
console.log("Cost & Policy:");
|
|
264
268
|
console.log(" sl cost show --json Show accumulated cost tracking");
|
|
265
269
|
console.log(" sl policy list List available policy packs");
|
|
@@ -2338,17 +2342,18 @@ jobs:
|
|
|
2338
2342
|
fi
|
|
2339
2343
|
- name: Run Omar Gate
|
|
2340
2344
|
id: omar
|
|
2341
|
-
uses: mrrCarter/sentinelayer-v1-action@
|
|
2345
|
+
uses: mrrCarter/sentinelayer-v1-action@03d7369cba7de2e9f15b959275c982111f0ee493
|
|
2342
2346
|
with:
|
|
2343
2347
|
github_token: \${{ github.token }}
|
|
2344
2348
|
sentinelayer_token: \${{ secrets.${normalizedSecret} }}${specIdBindingLine}
|
|
2345
2349
|
sentinelayer_managed_llm: "false"
|
|
2346
2350
|
openai_api_key: \${{ secrets.OPENAI_API_KEY }}
|
|
2351
|
+
google_api_key: \${{ secrets.GOOGLE_API_KEY }}
|
|
2347
2352
|
scan_mode: \${{ github.event_name == 'workflow_dispatch' && inputs.scan_mode || 'deep' }}
|
|
2348
2353
|
severity_gate: \${{ github.event_name == 'workflow_dispatch' && inputs.severity_gate || 'P1' }}
|
|
2349
2354
|
model: gpt-5.3-codex
|
|
2350
2355
|
codex_model: gpt-5.3-codex
|
|
2351
|
-
model_fallback:
|
|
2356
|
+
model_fallback: gemini-2.5-flash
|
|
2352
2357
|
llm_failure_policy: block
|
|
2353
2358
|
- name: Enforce Omar reviewer merge thresholds
|
|
2354
2359
|
shell: bash
|
package/src/mcp/registry.js
CHANGED
|
@@ -401,6 +401,157 @@ export function buildAidenIdRegistryTemplate({ generatedAt = new Date().toISOStr
|
|
|
401
401
|
};
|
|
402
402
|
}
|
|
403
403
|
|
|
404
|
+
/**
|
|
405
|
+
* Create a local SentinelLayer session MCP registry template.
|
|
406
|
+
*
|
|
407
|
+
* @param {{ generatedAt?: string }} [options]
|
|
408
|
+
* @returns {Record<string, any>}
|
|
409
|
+
*/
|
|
410
|
+
export function buildSentinelayerSessionRegistryTemplate({ generatedAt = new Date().toISOString() } = {}) {
|
|
411
|
+
return {
|
|
412
|
+
version: MCP_TOOL_REGISTRY_SCHEMA_VERSION,
|
|
413
|
+
generated_at: generatedAt,
|
|
414
|
+
tools: [
|
|
415
|
+
{
|
|
416
|
+
name: "poll_inbox",
|
|
417
|
+
title: "Poll Senti Inbox",
|
|
418
|
+
description:
|
|
419
|
+
"Poll durable SentinelLayer session events after an optional cursor and return events visible to one agent.",
|
|
420
|
+
input_schema: {
|
|
421
|
+
type: "object",
|
|
422
|
+
additionalProperties: false,
|
|
423
|
+
required: ["sessionId", "agentId"],
|
|
424
|
+
properties: {
|
|
425
|
+
sessionId: { type: "string" },
|
|
426
|
+
agentId: { type: "string" },
|
|
427
|
+
cursor: { type: "string" },
|
|
428
|
+
limit: { type: "integer", minimum: 1, maximum: 200 },
|
|
429
|
+
actionLimit: { type: "integer", minimum: 1, maximum: 200 },
|
|
430
|
+
includeActions: { type: "boolean" },
|
|
431
|
+
includeSelf: { type: "boolean" },
|
|
432
|
+
includeControlEvents: { type: "boolean" },
|
|
433
|
+
},
|
|
434
|
+
},
|
|
435
|
+
transport: {
|
|
436
|
+
type: "internal",
|
|
437
|
+
method: "POST",
|
|
438
|
+
url: "sentinelayer://session/poll_inbox",
|
|
439
|
+
timeout_ms: 15000,
|
|
440
|
+
auth: { mode: "none" },
|
|
441
|
+
},
|
|
442
|
+
budgets: {
|
|
443
|
+
max_calls_per_run: 60,
|
|
444
|
+
max_runtime_ms: 15000,
|
|
445
|
+
},
|
|
446
|
+
security: {
|
|
447
|
+
requires_human_approval: false,
|
|
448
|
+
kill_switch: "enabled",
|
|
449
|
+
scopes: ["session:read"],
|
|
450
|
+
},
|
|
451
|
+
metadata: {
|
|
452
|
+
provider: "sentinelayer",
|
|
453
|
+
adapter: "sentinelayer-cli",
|
|
454
|
+
server: "sentinelayer-session-mcp",
|
|
455
|
+
},
|
|
456
|
+
},
|
|
457
|
+
{
|
|
458
|
+
name: "send_message",
|
|
459
|
+
title: "Send Senti Message",
|
|
460
|
+
description:
|
|
461
|
+
"Send an authenticated agent session_message through the canonical SentinelLayer session event API.",
|
|
462
|
+
input_schema: {
|
|
463
|
+
type: "object",
|
|
464
|
+
additionalProperties: false,
|
|
465
|
+
required: ["sessionId", "agentId", "message"],
|
|
466
|
+
properties: {
|
|
467
|
+
sessionId: { type: "string" },
|
|
468
|
+
agentId: { type: "string" },
|
|
469
|
+
message: { type: "string" },
|
|
470
|
+
to: {
|
|
471
|
+
type: "array",
|
|
472
|
+
items: { type: "string" },
|
|
473
|
+
},
|
|
474
|
+
model: { type: "string" },
|
|
475
|
+
role: { type: "string" },
|
|
476
|
+
displayName: { type: "string" },
|
|
477
|
+
idempotencyKey: { type: "string" },
|
|
478
|
+
dryRun: { type: "boolean" },
|
|
479
|
+
},
|
|
480
|
+
},
|
|
481
|
+
transport: {
|
|
482
|
+
type: "internal",
|
|
483
|
+
method: "POST",
|
|
484
|
+
url: "sentinelayer://session/send_message",
|
|
485
|
+
timeout_ms: 15000,
|
|
486
|
+
auth: { mode: "none" },
|
|
487
|
+
},
|
|
488
|
+
budgets: {
|
|
489
|
+
max_calls_per_run: 20,
|
|
490
|
+
max_runtime_ms: 15000,
|
|
491
|
+
},
|
|
492
|
+
security: {
|
|
493
|
+
requires_human_approval: false,
|
|
494
|
+
kill_switch: "enabled",
|
|
495
|
+
scopes: ["session:write"],
|
|
496
|
+
},
|
|
497
|
+
metadata: {
|
|
498
|
+
provider: "sentinelayer",
|
|
499
|
+
adapter: "sentinelayer-cli",
|
|
500
|
+
server: "sentinelayer-session-mcp",
|
|
501
|
+
},
|
|
502
|
+
},
|
|
503
|
+
{
|
|
504
|
+
name: "attention_request",
|
|
505
|
+
title: "Request Senti Attention",
|
|
506
|
+
description:
|
|
507
|
+
"Create a help_request event for high-signal agent or human attention without chat polling.",
|
|
508
|
+
input_schema: {
|
|
509
|
+
type: "object",
|
|
510
|
+
additionalProperties: false,
|
|
511
|
+
required: ["sessionId", "agentId", "message"],
|
|
512
|
+
properties: {
|
|
513
|
+
sessionId: { type: "string" },
|
|
514
|
+
agentId: { type: "string" },
|
|
515
|
+
message: { type: "string" },
|
|
516
|
+
to: {
|
|
517
|
+
type: "array",
|
|
518
|
+
items: { type: "string" },
|
|
519
|
+
},
|
|
520
|
+
priority: { type: "string" },
|
|
521
|
+
severity: { type: "string" },
|
|
522
|
+
model: { type: "string" },
|
|
523
|
+
role: { type: "string" },
|
|
524
|
+
displayName: { type: "string" },
|
|
525
|
+
idempotencyKey: { type: "string" },
|
|
526
|
+
dryRun: { type: "boolean" },
|
|
527
|
+
},
|
|
528
|
+
},
|
|
529
|
+
transport: {
|
|
530
|
+
type: "internal",
|
|
531
|
+
method: "POST",
|
|
532
|
+
url: "sentinelayer://session/attention_request",
|
|
533
|
+
timeout_ms: 15000,
|
|
534
|
+
auth: { mode: "none" },
|
|
535
|
+
},
|
|
536
|
+
budgets: {
|
|
537
|
+
max_calls_per_run: 20,
|
|
538
|
+
max_runtime_ms: 15000,
|
|
539
|
+
},
|
|
540
|
+
security: {
|
|
541
|
+
requires_human_approval: false,
|
|
542
|
+
kill_switch: "enabled",
|
|
543
|
+
scopes: ["session:write"],
|
|
544
|
+
},
|
|
545
|
+
metadata: {
|
|
546
|
+
provider: "sentinelayer",
|
|
547
|
+
adapter: "sentinelayer-cli",
|
|
548
|
+
server: "sentinelayer-session-mcp",
|
|
549
|
+
},
|
|
550
|
+
},
|
|
551
|
+
],
|
|
552
|
+
};
|
|
553
|
+
}
|
|
554
|
+
|
|
404
555
|
/**
|
|
405
556
|
* Create an AIdenID adapter contract template that binds MCP tools to provisioning endpoints.
|
|
406
557
|
*
|