sentinelayer-cli 0.6.2 → 0.8.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/README.md +996 -996
- package/bin/create-sentinelayer.js +5 -5
- package/bin/sentinelayer-cli.js +4 -4
- package/bin/sl.js +5 -5
- package/package.json +64 -63
- package/src/agents/jules/config/definition.js +160 -160
- package/src/agents/jules/config/system-prompt.js +182 -182
- package/src/agents/jules/error-intake.js +51 -51
- package/src/agents/jules/fix-cycle.js +17 -17
- package/src/agents/jules/loop.js +457 -450
- package/src/agents/jules/pulse.js +10 -10
- package/src/agents/jules/stream.js +187 -186
- package/src/agents/jules/swarm/file-scanner.js +74 -74
- package/src/agents/jules/swarm/index.js +11 -11
- package/src/agents/jules/swarm/orchestrator.js +362 -362
- package/src/agents/jules/swarm/pattern-hunter.js +123 -123
- package/src/agents/jules/swarm/sub-agent.js +311 -309
- package/src/agents/jules/tools/aidenid-email.js +189 -189
- package/src/agents/jules/tools/auth-audit.js +1699 -1691
- package/src/agents/jules/tools/dispatch.js +340 -335
- package/src/agents/jules/tools/file-edit.js +2 -2
- package/src/agents/jules/tools/file-read.js +2 -2
- package/src/agents/jules/tools/frontend-analyze.js +570 -570
- package/src/agents/jules/tools/glob.js +2 -2
- package/src/agents/jules/tools/grep.js +2 -2
- package/src/agents/jules/tools/index.js +29 -29
- package/src/agents/jules/tools/path-guards.js +2 -2
- package/src/agents/jules/tools/runtime-audit.js +507 -507
- package/src/agents/jules/tools/shell.js +2 -2
- package/src/agents/jules/tools/url-policy.js +100 -100
- package/src/agents/persona-visuals.js +64 -61
- package/src/agents/shared-tools/dispatch-core.js +320 -315
- package/src/agents/shared-tools/file-edit.js +180 -180
- package/src/agents/shared-tools/file-read.js +100 -100
- package/src/agents/shared-tools/glob.js +168 -168
- package/src/agents/shared-tools/grep.js +228 -228
- package/src/agents/shared-tools/index.js +46 -46
- package/src/agents/shared-tools/path-guards.js +161 -161
- package/src/agents/shared-tools/shell.js +383 -383
- package/src/ai/aidenid.js +1021 -1009
- package/src/ai/client.js +553 -553
- package/src/ai/domain-target-store.js +268 -268
- package/src/ai/identity-store.js +270 -270
- package/src/ai/proxy.js +137 -137
- package/src/ai/site-store.js +145 -145
- package/src/audit/agents/architecture.js +180 -180
- package/src/audit/agents/compliance.js +179 -179
- package/src/audit/agents/documentation.js +165 -165
- package/src/audit/agents/performance.js +145 -145
- package/src/audit/agents/security.js +215 -215
- package/src/audit/agents/testing.js +172 -172
- package/src/audit/orchestrator.js +557 -557
- package/src/audit/package.js +204 -204
- package/src/audit/registry.js +284 -284
- package/src/audit/replay.js +103 -103
- package/src/auth/gate.js +400 -371
- package/src/auth/http.js +681 -611
- package/src/auth/service.js +1106 -1106
- package/src/auth/session-store.js +813 -813
- package/src/cli.js +257 -252
- package/src/commands/ai/identity-lifecycle.js +1338 -1338
- package/src/commands/ai/provision-governance.js +1272 -1272
- package/src/commands/ai/shared.js +147 -147
- package/src/commands/ai.js +11 -11
- package/src/commands/apply.js +12 -12
- package/src/commands/audit.js +1171 -1166
- package/src/commands/auth.js +419 -419
- package/src/commands/chat.js +191 -191
- package/src/commands/config.js +184 -184
- package/src/commands/cost.js +311 -311
- package/src/commands/daemon/core.js +850 -850
- package/src/commands/daemon/extended.js +1048 -1048
- package/src/commands/daemon/shared.js +213 -213
- package/src/commands/daemon.js +11 -11
- package/src/commands/guide.js +174 -174
- package/src/commands/ingest.js +58 -58
- package/src/commands/init.js +55 -55
- package/src/commands/legacy-args.js +10 -10
- package/src/commands/mcp.js +461 -461
- package/src/commands/omargate.js +29 -29
- package/src/commands/persona.js +20 -20
- package/src/commands/plugin.js +260 -260
- package/src/commands/policy.js +132 -132
- package/src/commands/prompt.js +238 -238
- package/src/commands/review.js +704 -704
- package/src/commands/scan.js +872 -872
- package/src/commands/session.js +590 -0
- package/src/commands/spec.js +778 -716
- package/src/commands/swarm.js +651 -651
- package/src/commands/telemetry.js +202 -202
- package/src/commands/watch.js +511 -511
- package/src/config/agent-dictionary.js +182 -182
- package/src/config/io.js +56 -56
- package/src/config/paths.js +18 -18
- package/src/config/schema.js +55 -55
- package/src/config/service.js +184 -184
- package/src/cost/budget.js +235 -235
- package/src/cost/history.js +188 -188
- package/src/cost/tracker.js +171 -171
- package/src/daemon/artifact-lineage.js +534 -534
- package/src/daemon/assignment-ledger.js +966 -770
- package/src/daemon/ast-parser-layer.js +258 -258
- package/src/daemon/budget-governor.js +633 -633
- package/src/daemon/callgraph-overlay.js +646 -646
- package/src/daemon/error-worker.js +1209 -626
- package/src/daemon/fix-cycle.js +384 -377
- package/src/daemon/hybrid-mapper.js +929 -929
- package/src/daemon/ingest-refresh.js +10 -9
- package/src/daemon/jira-lifecycle.js +767 -632
- package/src/daemon/operator-control.js +657 -657
- package/src/daemon/pulse.js +327 -327
- package/src/daemon/reliability-lane.js +471 -471
- package/src/daemon/scope-engine.js +1068 -0
- package/src/daemon/watchdog.js +971 -971
- package/src/events/schema.js +190 -0
- package/src/guide/generator.js +316 -316
- package/src/ingest/engine.js +918 -918
- package/src/interactive/index.js +97 -97
- package/src/legacy-cli.js +3161 -2994
- package/src/mcp/registry.js +695 -695
- package/src/memory/blackboard.js +301 -301
- package/src/memory/retrieval.js +581 -581
- package/src/plugin/manifest.js +553 -553
- package/src/policy/packs.js +144 -144
- package/src/prompt/generator.js +136 -118
- package/src/review/ai-review.js +679 -679
- package/src/review/local-review.js +1351 -1305
- package/src/review/omargate-interactive.js +68 -68
- package/src/review/omargate-orchestrator.js +404 -300
- package/src/review/persona-prompts.js +296 -296
- package/src/review/replay.js +235 -235
- package/src/review/report.js +664 -664
- package/src/review/scan-modes.js +48 -42
- package/src/review/spec-binding.js +487 -487
- package/src/scaffold/generator.js +67 -67
- package/src/scaffold/templates.js +150 -150
- package/src/scan/generator.js +418 -418
- package/src/scan/gh-secrets.js +107 -107
- package/src/session/agent-registry.js +352 -0
- package/src/session/daemon.js +801 -0
- package/src/session/paths.js +33 -0
- package/src/session/runtime-bridge.js +739 -0
- package/src/session/store.js +388 -0
- package/src/session/stream.js +325 -0
- package/src/spec/generator.js +619 -519
- package/src/spec/regenerate.js +237 -237
- package/src/spec/templates.js +91 -91
- package/src/swarm/dashboard.js +247 -247
- package/src/swarm/factory.js +363 -363
- package/src/swarm/pentest.js +934 -934
- package/src/swarm/registry.js +419 -419
- package/src/swarm/report.js +158 -158
- package/src/swarm/runtime.js +576 -576
- package/src/swarm/scenario-dsl.js +272 -272
- package/src/telemetry/ledger.js +302 -302
- package/src/telemetry/session-tracker.js +234 -234
- package/src/telemetry/sync.js +203 -203
- package/src/ui/command-hints.js +13 -13
- package/src/ui/markdown.js +220 -220
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
const AGENT_EVENT_STREAM = "sl_event";
|
|
2
|
+
const LEGACY_AGENT_ID = "legacy-emitter";
|
|
3
|
+
|
|
4
|
+
function isPlainObject(value) {
|
|
5
|
+
return Boolean(value) && typeof value === "object" && !Array.isArray(value);
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
function normalizeNonEmptyString(value) {
|
|
9
|
+
const normalized = String(value || "").trim();
|
|
10
|
+
return normalized || "";
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
function normalizeOptionalString(value) {
|
|
14
|
+
const normalized = normalizeNonEmptyString(value);
|
|
15
|
+
return normalized || undefined;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
function normalizeTimestamp(value, fallbackTimestamp) {
|
|
19
|
+
const rawValue = normalizeNonEmptyString(value);
|
|
20
|
+
const fallback = normalizeNonEmptyString(fallbackTimestamp) || new Date().toISOString();
|
|
21
|
+
if (!rawValue) {
|
|
22
|
+
return fallback;
|
|
23
|
+
}
|
|
24
|
+
const epoch = Date.parse(rawValue);
|
|
25
|
+
if (!Number.isFinite(epoch)) {
|
|
26
|
+
return fallback;
|
|
27
|
+
}
|
|
28
|
+
return new Date(epoch).toISOString();
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
function stripUndefinedEntries(record) {
|
|
32
|
+
const cleaned = {};
|
|
33
|
+
for (const [key, value] of Object.entries(record || {})) {
|
|
34
|
+
if (value !== undefined) {
|
|
35
|
+
cleaned[key] = value;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
return cleaned;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
function normalizeAgentShape(input = {}) {
|
|
42
|
+
const fromAgentObject = isPlainObject(input.agent) ? { ...input.agent } : {};
|
|
43
|
+
const fromLegacyString = typeof input.agent === "string" ? input.agent : "";
|
|
44
|
+
const candidateId =
|
|
45
|
+
normalizeNonEmptyString(input.agentId) ||
|
|
46
|
+
normalizeNonEmptyString(fromLegacyString) ||
|
|
47
|
+
normalizeNonEmptyString(fromAgentObject.id);
|
|
48
|
+
if (!candidateId) {
|
|
49
|
+
return null;
|
|
50
|
+
}
|
|
51
|
+
const normalized = {
|
|
52
|
+
...fromAgentObject,
|
|
53
|
+
id: candidateId,
|
|
54
|
+
model: normalizeOptionalString(input.agentModel) || normalizeOptionalString(fromAgentObject.model),
|
|
55
|
+
};
|
|
56
|
+
return stripUndefinedEntries(normalized);
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
function resolveLegacyPayload(evt) {
|
|
60
|
+
if (isPlainObject(evt.payload)) {
|
|
61
|
+
return { ...evt.payload };
|
|
62
|
+
}
|
|
63
|
+
if (isPlainObject(evt.data)) {
|
|
64
|
+
return { ...evt.data };
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
const synthesized = {};
|
|
68
|
+
for (const key of ["alert", "target", "message", "details", "reason", "error"]) {
|
|
69
|
+
if (evt[key] !== undefined) {
|
|
70
|
+
synthesized[key] = evt[key];
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
return Object.keys(synthesized).length > 0 ? synthesized : null;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
export function createAgentEvent({
|
|
77
|
+
event,
|
|
78
|
+
agentId,
|
|
79
|
+
agentModel,
|
|
80
|
+
payload,
|
|
81
|
+
sessionId,
|
|
82
|
+
usage,
|
|
83
|
+
runId,
|
|
84
|
+
workItemId,
|
|
85
|
+
requestId,
|
|
86
|
+
agent,
|
|
87
|
+
ts,
|
|
88
|
+
timestamp,
|
|
89
|
+
} = {}) {
|
|
90
|
+
const normalizedEvent = normalizeNonEmptyString(event);
|
|
91
|
+
const normalizedAgent = normalizeAgentShape({
|
|
92
|
+
agentId,
|
|
93
|
+
agentModel,
|
|
94
|
+
agent,
|
|
95
|
+
});
|
|
96
|
+
const normalizedPayload = isPlainObject(payload) ? { ...payload } : null;
|
|
97
|
+
if (!normalizedEvent || !normalizedAgent?.id || !normalizedPayload) {
|
|
98
|
+
throw new Error("createAgentEvent requires event, agentId, and payload");
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
const canonicalTs = normalizeTimestamp(ts || timestamp);
|
|
102
|
+
return stripUndefinedEntries({
|
|
103
|
+
stream: AGENT_EVENT_STREAM,
|
|
104
|
+
event: normalizedEvent,
|
|
105
|
+
agent: normalizedAgent,
|
|
106
|
+
payload: normalizedPayload,
|
|
107
|
+
usage: isPlainObject(usage) ? { ...usage } : undefined,
|
|
108
|
+
sessionId: normalizeOptionalString(sessionId),
|
|
109
|
+
runId: normalizeOptionalString(runId),
|
|
110
|
+
workItemId: normalizeOptionalString(workItemId),
|
|
111
|
+
requestId: normalizeOptionalString(requestId),
|
|
112
|
+
ts: canonicalTs,
|
|
113
|
+
// Keep legacy timestamp key for existing consumers while PR0 migrates envelope usage.
|
|
114
|
+
timestamp: canonicalTs,
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
export function normalizeAgentEvent(evt, { allowLegacy = true } = {}) {
|
|
119
|
+
if (!isPlainObject(evt)) {
|
|
120
|
+
return null;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
const stream = normalizeOptionalString(evt.stream);
|
|
124
|
+
if (stream && stream !== AGENT_EVENT_STREAM) {
|
|
125
|
+
return null;
|
|
126
|
+
}
|
|
127
|
+
if (!stream && !allowLegacy) {
|
|
128
|
+
return null;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
const normalizedEvent = normalizeNonEmptyString(evt.event || (allowLegacy ? evt.type : ""));
|
|
132
|
+
if (!normalizedEvent) {
|
|
133
|
+
return null;
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
const payload = resolveLegacyPayload(evt);
|
|
137
|
+
if (!payload) {
|
|
138
|
+
return null;
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
const normalizedAgent =
|
|
142
|
+
normalizeAgentShape({
|
|
143
|
+
agentId: evt.agentId,
|
|
144
|
+
agentModel: evt.agentModel,
|
|
145
|
+
agent: evt.agent,
|
|
146
|
+
}) ||
|
|
147
|
+
(allowLegacy && !stream
|
|
148
|
+
? normalizeAgentShape({
|
|
149
|
+
agentId:
|
|
150
|
+
normalizeNonEmptyString(evt.sourceAgentId) ||
|
|
151
|
+
normalizeNonEmptyString(evt.source) ||
|
|
152
|
+
LEGACY_AGENT_ID,
|
|
153
|
+
})
|
|
154
|
+
: null);
|
|
155
|
+
if (!normalizedAgent) {
|
|
156
|
+
return null;
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
const rawTimestamp = evt.ts || evt.timestamp || evt.time || evt.at || "";
|
|
160
|
+
if (!rawTimestamp && !allowLegacy) {
|
|
161
|
+
return null;
|
|
162
|
+
}
|
|
163
|
+
const fallbackTimestamp = allowLegacy ? new Date().toISOString() : undefined;
|
|
164
|
+
const normalizedTs = normalizeTimestamp(rawTimestamp, fallbackTimestamp);
|
|
165
|
+
if (!normalizedTs) {
|
|
166
|
+
return null;
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
try {
|
|
170
|
+
return createAgentEvent({
|
|
171
|
+
event: normalizedEvent,
|
|
172
|
+
agent: normalizedAgent,
|
|
173
|
+
payload,
|
|
174
|
+
usage: evt.usage,
|
|
175
|
+
sessionId: evt.sessionId,
|
|
176
|
+
runId: evt.runId,
|
|
177
|
+
workItemId: evt.workItemId,
|
|
178
|
+
requestId: evt.requestId,
|
|
179
|
+
ts: normalizedTs,
|
|
180
|
+
});
|
|
181
|
+
} catch {
|
|
182
|
+
return null;
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
export function validateAgentEvent(evt, options = {}) {
|
|
187
|
+
return Boolean(normalizeAgentEvent(evt, options));
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
export { AGENT_EVENT_STREAM };
|