@sponsio/sdk 0.1.0-alpha.3 → 0.2.0-alpha.4

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.
Files changed (203) hide show
  1. package/bin/sponsio.cjs +11 -0
  2. package/contracts/benchmark/agentdojo.yaml +551 -0
  3. package/contracts/benchmark/odcv_bench.yaml +393 -0
  4. package/contracts/benchmark/redcode_exec.yaml +488 -0
  5. package/contracts/benchmark/swebench.yaml +176 -0
  6. package/contracts/benchmark/tau2_bench.yaml +984 -0
  7. package/contracts/capability/credentials.yaml +8 -8
  8. package/contracts/capability/database.yaml +6 -6
  9. package/contracts/capability/filesystem-strict.yaml +4 -4
  10. package/contracts/capability/filesystem.yaml +9 -9
  11. package/contracts/capability/host-config-integrity.yaml +285 -0
  12. package/contracts/capability/self-modify.yaml +214 -9
  13. package/contracts/capability/shell.yaml +25 -32
  14. package/contracts/capability/subagent.yaml +5 -5
  15. package/contracts/core/llm_safety.yaml +21 -13
  16. package/contracts/incident/claude-code-secret-bypass.yaml +11 -12
  17. package/contracts/incident/cursor-railway-wipe.yaml +3 -3
  18. package/contracts/incident/mcp-composition.yaml +12 -12
  19. package/contracts/incident/openclaw.yaml +54 -45
  20. package/contracts/incident/subagent-escape.yaml +4 -4
  21. package/contracts/premium/.gitkeep +5 -6
  22. package/dist/cli/check.d.ts +2 -0
  23. package/dist/cli/check.d.ts.map +1 -0
  24. package/dist/cli/check.js +283 -0
  25. package/dist/cli/check.js.map +1 -0
  26. package/dist/cli/cli.d.ts +25 -0
  27. package/dist/cli/cli.d.ts.map +1 -0
  28. package/dist/cli/cli.js +459 -0
  29. package/dist/cli/cli.js.map +1 -0
  30. package/dist/cli/config.d.ts +88 -0
  31. package/dist/cli/config.d.ts.map +1 -0
  32. package/dist/cli/config.js +243 -0
  33. package/dist/cli/config.js.map +1 -0
  34. package/dist/cli/demo.d.ts +12 -0
  35. package/dist/cli/demo.d.ts.map +1 -0
  36. package/dist/cli/demo.js +350 -0
  37. package/dist/cli/demo.js.map +1 -0
  38. package/dist/cli/doctor.d.ts +11 -0
  39. package/dist/cli/doctor.d.ts.map +1 -0
  40. package/dist/cli/doctor.js +201 -0
  41. package/dist/cli/doctor.js.map +1 -0
  42. package/dist/cli/eval.d.ts +2 -0
  43. package/dist/cli/eval.d.ts.map +1 -0
  44. package/dist/cli/eval.js +361 -0
  45. package/dist/cli/eval.js.map +1 -0
  46. package/dist/cli/explain.d.ts +2 -0
  47. package/dist/cli/explain.d.ts.map +1 -0
  48. package/dist/cli/explain.js +266 -0
  49. package/dist/cli/explain.js.map +1 -0
  50. package/dist/cli/export-sessions.d.ts +2 -0
  51. package/dist/cli/export-sessions.d.ts.map +1 -0
  52. package/dist/cli/export-sessions.js +182 -0
  53. package/dist/cli/export-sessions.js.map +1 -0
  54. package/dist/cli/export.d.ts +2 -0
  55. package/dist/cli/export.d.ts.map +1 -0
  56. package/dist/cli/export.js +222 -0
  57. package/dist/cli/export.js.map +1 -0
  58. package/dist/cli/extractors/common.d.ts +27 -0
  59. package/dist/cli/extractors/common.d.ts.map +1 -0
  60. package/dist/cli/extractors/common.js +107 -0
  61. package/dist/cli/extractors/common.js.map +1 -0
  62. package/dist/cli/extractors/generic.d.ts +37 -0
  63. package/dist/cli/extractors/generic.d.ts.map +1 -0
  64. package/dist/cli/extractors/generic.js +185 -0
  65. package/dist/cli/extractors/generic.js.map +1 -0
  66. package/dist/cli/extractors/langchain.d.ts +18 -0
  67. package/dist/cli/extractors/langchain.d.ts.map +1 -0
  68. package/dist/cli/extractors/langchain.js +86 -0
  69. package/dist/cli/extractors/langchain.js.map +1 -0
  70. package/dist/cli/extractors/vercel.d.ts +17 -0
  71. package/dist/cli/extractors/vercel.d.ts.map +1 -0
  72. package/dist/cli/extractors/vercel.js +46 -0
  73. package/dist/cli/extractors/vercel.js.map +1 -0
  74. package/dist/cli/index.d.ts +38 -0
  75. package/dist/cli/index.d.ts.map +1 -0
  76. package/dist/cli/index.js +146 -0
  77. package/dist/cli/index.js.map +1 -0
  78. package/dist/cli/init.d.ts +2 -0
  79. package/dist/cli/init.d.ts.map +1 -0
  80. package/dist/cli/init.js +177 -0
  81. package/dist/cli/init.js.map +1 -0
  82. package/dist/cli/mode.d.ts +2 -0
  83. package/dist/cli/mode.d.ts.map +1 -0
  84. package/dist/cli/mode.js +71 -0
  85. package/dist/cli/mode.js.map +1 -0
  86. package/dist/cli/onboard.d.ts +88 -0
  87. package/dist/cli/onboard.d.ts.map +1 -0
  88. package/dist/cli/onboard.js +758 -0
  89. package/dist/cli/onboard.js.map +1 -0
  90. package/dist/cli/otlp.d.ts +27 -0
  91. package/dist/cli/otlp.d.ts.map +1 -0
  92. package/dist/cli/otlp.js +79 -0
  93. package/dist/cli/otlp.js.map +1 -0
  94. package/dist/cli/package.json +1 -0
  95. package/dist/cli/packs.d.ts +16 -0
  96. package/dist/cli/packs.d.ts.map +1 -0
  97. package/dist/cli/packs.js +184 -0
  98. package/dist/cli/packs.js.map +1 -0
  99. package/dist/cli/patterns.d.ts +16 -0
  100. package/dist/cli/patterns.d.ts.map +1 -0
  101. package/dist/cli/patterns.js +136 -0
  102. package/dist/cli/patterns.js.map +1 -0
  103. package/dist/cli/prompt.d.ts +2 -0
  104. package/dist/cli/prompt.d.ts.map +1 -0
  105. package/dist/cli/prompt.js +54 -0
  106. package/dist/cli/prompt.js.map +1 -0
  107. package/dist/cli/replay.d.ts +2 -0
  108. package/dist/cli/replay.d.ts.map +1 -0
  109. package/dist/cli/replay.js +196 -0
  110. package/dist/cli/replay.js.map +1 -0
  111. package/dist/cli/report.d.ts +57 -0
  112. package/dist/cli/report.d.ts.map +1 -0
  113. package/dist/cli/report.js +298 -0
  114. package/dist/cli/report.js.map +1 -0
  115. package/dist/cli/scan.d.ts +2 -0
  116. package/dist/cli/scan.d.ts.map +1 -0
  117. package/dist/cli/scan.js +172 -0
  118. package/dist/cli/scan.js.map +1 -0
  119. package/dist/cli/skill.d.ts +15 -0
  120. package/dist/cli/skill.d.ts.map +1 -0
  121. package/dist/cli/skill.js +131 -0
  122. package/dist/cli/skill.js.map +1 -0
  123. package/dist/cli/tokens.d.ts +31 -0
  124. package/dist/cli/tokens.d.ts.map +1 -0
  125. package/dist/cli/tokens.js +73 -0
  126. package/dist/cli/tokens.js.map +1 -0
  127. package/dist/cli/types.d.ts +46 -0
  128. package/dist/cli/types.d.ts.map +1 -0
  129. package/dist/cli/types.js +3 -0
  130. package/dist/cli/types.js.map +1 -0
  131. package/dist/cli/validate.d.ts +19 -0
  132. package/dist/cli/validate.d.ts.map +1 -0
  133. package/dist/cli/validate.js +205 -0
  134. package/dist/cli/validate.js.map +1 -0
  135. package/dist/cli/zod.d.ts +36 -0
  136. package/dist/cli/zod.d.ts.map +1 -0
  137. package/dist/cli/zod.js +226 -0
  138. package/dist/cli/zod.js.map +1 -0
  139. package/dist/contract.d.ts +13 -13
  140. package/dist/contract.d.ts.map +1 -1
  141. package/dist/contract.js +21 -21
  142. package/dist/contract.js.map +1 -1
  143. package/dist/core/config-loader.d.ts +1 -1
  144. package/dist/core/config-loader.d.ts.map +1 -1
  145. package/dist/core/config-loader.js +100 -26
  146. package/dist/core/config-loader.js.map +1 -1
  147. package/dist/core/evaluator.d.ts +9 -1
  148. package/dist/core/evaluator.d.ts.map +1 -1
  149. package/dist/core/evaluator.js +189 -13
  150. package/dist/core/evaluator.js.map +1 -1
  151. package/dist/core/formula.d.ts +76 -17
  152. package/dist/core/formula.d.ts.map +1 -1
  153. package/dist/core/formula.js +83 -1
  154. package/dist/core/formula.js.map +1 -1
  155. package/dist/core/grounding.d.ts +50 -3
  156. package/dist/core/grounding.d.ts.map +1 -1
  157. package/dist/core/grounding.js +317 -141
  158. package/dist/core/grounding.js.map +1 -1
  159. package/dist/core/nl-parser.d.ts +1 -1
  160. package/dist/core/nl-parser.d.ts.map +1 -1
  161. package/dist/core/nl-parser.js +76 -4
  162. package/dist/core/nl-parser.js.map +1 -1
  163. package/dist/core/pack-loader.d.ts.map +1 -1
  164. package/dist/core/pack-loader.js +14 -2
  165. package/dist/core/pack-loader.js.map +1 -1
  166. package/dist/core/parser.d.ts.map +1 -1
  167. package/dist/core/parser.js +30 -1
  168. package/dist/core/parser.js.map +1 -1
  169. package/dist/core/pattern-factory.d.ts +4 -4
  170. package/dist/core/pattern-factory.d.ts.map +1 -1
  171. package/dist/core/pattern-factory.js +53 -4
  172. package/dist/core/pattern-factory.js.map +1 -1
  173. package/dist/core/patterns.d.ts +127 -5
  174. package/dist/core/patterns.d.ts.map +1 -1
  175. package/dist/core/patterns.js +267 -3
  176. package/dist/core/patterns.js.map +1 -1
  177. package/dist/core/session-log.d.ts.map +1 -1
  178. package/dist/core/session-log.js +20 -1
  179. package/dist/core/session-log.js.map +1 -1
  180. package/dist/core/spans.d.ts +1 -1
  181. package/dist/core/spans.d.ts.map +1 -1
  182. package/dist/core/spans.js.map +1 -1
  183. package/dist/core/sto.d.ts +30 -66
  184. package/dist/core/sto.d.ts.map +1 -1
  185. package/dist/core/sto.js +39 -100
  186. package/dist/core/sto.js.map +1 -1
  187. package/dist/index.d.ts +83 -33
  188. package/dist/index.d.ts.map +1 -1
  189. package/dist/index.js +194 -142
  190. package/dist/index.js.map +1 -1
  191. package/dist/integrations/openai-agents.d.ts.map +1 -1
  192. package/dist/integrations/openai-agents.js +6 -4
  193. package/dist/integrations/openai-agents.js.map +1 -1
  194. package/dist/integrations/vercel-ai.d.ts.map +1 -1
  195. package/dist/integrations/vercel-ai.js +21 -3
  196. package/dist/integrations/vercel-ai.js.map +1 -1
  197. package/dist/render/tokens.d.ts.map +1 -1
  198. package/dist/render/tokens.js +1 -0
  199. package/dist/render/tokens.js.map +1 -1
  200. package/package.json +35 -7
  201. package/prompts/onboard.md +246 -0
  202. package/prompts/scan.md +123 -0
  203. package/skills/SKILL.md +432 -0
@@ -0,0 +1,196 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.runReplayCli = runReplayCli;
4
+ /**
5
+ * ``sponsio replay`` — re-render a recorded session log.
6
+ *
7
+ * Mirrors the Python ``sponsio replay`` UX: take a session id, file
8
+ * stem, or direct path; read ``~/.sponsio/sessions/<agent>/*.jsonl``;
9
+ * pretty-print each event in chronological order. Also supports
10
+ * ``--list`` to browse available sessions.
11
+ *
12
+ * The TS implementation skips Python's AgentTurnSpan reconstruction
13
+ * (that infra lives only on the Python side); instead it produces a
14
+ * flat per-event view that's still readable and covers the audit-trail
15
+ * use case.
16
+ */
17
+ const node_fs_1 = require("node:fs");
18
+ const node_os_1 = require("node:os");
19
+ const node_path_1 = require("node:path");
20
+ const HELP = "sponsio replay — re-render a recorded session\n" +
21
+ "\n" +
22
+ "USAGE:\n" +
23
+ " sponsio replay [session] [options]\n" +
24
+ "\n" +
25
+ "ARGUMENTS:\n" +
26
+ " [session] short id, filename stem, or direct path to a jsonl log\n" +
27
+ "\n" +
28
+ "OPTIONS:\n" +
29
+ " --list List available sessions and exit\n" +
30
+ " --agent <id> Override the agent id derived from the session path\n" +
31
+ " --json Emit raw event JSON (one per line) instead of pretty\n" +
32
+ " -h, --help Show this help\n" +
33
+ "\n" +
34
+ "EXAMPLES:\n" +
35
+ " sponsio replay --list\n" +
36
+ " sponsio replay 20260501_002216_83674\n" +
37
+ " sponsio replay /path/to/log.jsonl\n";
38
+ function sessionsRoot() {
39
+ return (0, node_path_1.join)((0, node_os_1.homedir)(), ".sponsio", "sessions");
40
+ }
41
+ function listSessions() {
42
+ const root = sessionsRoot();
43
+ if (!(0, node_fs_1.existsSync)(root))
44
+ return [];
45
+ const out = [];
46
+ for (const agent of (0, node_fs_1.readdirSync)(root)) {
47
+ const dir = (0, node_path_1.join)(root, agent);
48
+ if (!(0, node_fs_1.statSync)(dir).isDirectory())
49
+ continue;
50
+ for (const f of (0, node_fs_1.readdirSync)(dir)) {
51
+ if (!f.endsWith(".jsonl"))
52
+ continue;
53
+ const path = (0, node_path_1.join)(dir, f);
54
+ const st = (0, node_fs_1.statSync)(path);
55
+ out.push({ agent, stem: f.replace(/\.jsonl$/, ""), path, mtime: st.mtimeMs, size: st.size });
56
+ }
57
+ }
58
+ out.sort((a, b) => b.mtime - a.mtime);
59
+ return out;
60
+ }
61
+ function resolveSession(query) {
62
+ if ((0, node_fs_1.existsSync)(query)) {
63
+ const path = (0, node_path_1.isAbsolute)(query) ? query : (0, node_path_1.join)(process.cwd(), query);
64
+ const st = (0, node_fs_1.statSync)(path);
65
+ return {
66
+ agent: (0, node_path_1.basename)((0, node_path_1.join)(path, "..")),
67
+ stem: (0, node_path_1.basename)(path).replace(/\.jsonl$/, ""),
68
+ path,
69
+ mtime: st.mtimeMs,
70
+ size: st.size,
71
+ };
72
+ }
73
+ const all = listSessions();
74
+ const exact = all.find((s) => s.stem === query);
75
+ if (exact)
76
+ return exact;
77
+ const prefix = all.filter((s) => s.stem.startsWith(query));
78
+ if (prefix.length === 1)
79
+ return prefix[0];
80
+ if (prefix.length > 1) {
81
+ process.stderr.write(`ambiguous session id '${query}' — matches:\n`);
82
+ for (const s of prefix.slice(0, 5))
83
+ process.stderr.write(` ${s.agent}/${s.stem}\n`);
84
+ process.exit(2);
85
+ }
86
+ return null;
87
+ }
88
+ function fmtTs(ts) {
89
+ if (typeof ts !== "number")
90
+ return "?".padEnd(19);
91
+ return new Date(ts * 1000).toISOString().replace("T", " ").slice(0, 19);
92
+ }
93
+ function decorate(action) {
94
+ switch (action.toLowerCase()) {
95
+ case "blocked":
96
+ return `\x1b[31m${action.toUpperCase()}\x1b[0m`;
97
+ case "would-block":
98
+ case "would_block":
99
+ return `\x1b[33m${action.toUpperCase()}\x1b[0m`;
100
+ case "allowed":
101
+ case "passed":
102
+ return `\x1b[32m${action.toLowerCase()}\x1b[0m`;
103
+ default:
104
+ return action;
105
+ }
106
+ }
107
+ async function runReplayCli(argv) {
108
+ let listOnly = false;
109
+ let asJson = false;
110
+ let agentOverride;
111
+ let session = null;
112
+ for (let i = 0; i < argv.length; i++) {
113
+ const a = argv[i];
114
+ if (a === "-h" || a === "--help") {
115
+ process.stdout.write(HELP);
116
+ return;
117
+ }
118
+ if (a === "--list") {
119
+ listOnly = true;
120
+ continue;
121
+ }
122
+ if (a === "--json") {
123
+ asJson = true;
124
+ continue;
125
+ }
126
+ if (a === "--agent") {
127
+ agentOverride = argv[++i];
128
+ continue;
129
+ }
130
+ if (a.startsWith("-")) {
131
+ process.stderr.write(`unknown flag: ${a}\n${HELP}`);
132
+ process.exit(2);
133
+ }
134
+ if (session !== null) {
135
+ process.stderr.write(`extra positional argument: ${a}\n${HELP}`);
136
+ process.exit(2);
137
+ }
138
+ session = a;
139
+ }
140
+ if (listOnly) {
141
+ const all = listSessions();
142
+ if (all.length === 0) {
143
+ process.stdout.write("(no sessions in ~/.sponsio/sessions)\n");
144
+ return;
145
+ }
146
+ process.stdout.write(`Found ${all.length} session(s):\n\n`);
147
+ for (const s of all.slice(0, 50)) {
148
+ const dt = new Date(s.mtime).toISOString().slice(0, 19).replace("T", " ");
149
+ const kb = (s.size / 1024).toFixed(1);
150
+ process.stdout.write(` ${dt} ${s.agent.padEnd(20)} ${s.stem} (${kb} KB)\n`);
151
+ }
152
+ if (all.length > 50)
153
+ process.stdout.write(` … +${all.length - 50} more\n`);
154
+ return;
155
+ }
156
+ if (!session) {
157
+ process.stderr.write(`missing session id (or pass --list)\n\n${HELP}`);
158
+ process.exit(2);
159
+ }
160
+ const file = resolveSession(session);
161
+ if (!file) {
162
+ process.stderr.write(`Error: no session matched '${session}'. Try --list.\n`);
163
+ process.exit(2);
164
+ }
165
+ const text = (0, node_fs_1.readFileSync)(file.path, "utf-8");
166
+ const lines = text.split(/\r?\n/).filter(Boolean);
167
+ if (asJson) {
168
+ for (const line of lines)
169
+ process.stdout.write(line + "\n");
170
+ return;
171
+ }
172
+ const agent = agentOverride ?? file.agent;
173
+ process.stdout.write(`Session: ${file.stem}\n`);
174
+ process.stdout.write(`Agent: ${agent}\n`);
175
+ process.stdout.write(`Source: ${file.path}\n`);
176
+ process.stdout.write(`Events: ${lines.length}\n\n`);
177
+ for (const line of lines) {
178
+ let ev;
179
+ try {
180
+ ev = JSON.parse(line);
181
+ }
182
+ catch {
183
+ continue;
184
+ }
185
+ const ts = fmtTs(ev.ts);
186
+ const pipeline = (ev.pipeline ?? "?").padEnd(3);
187
+ const action = decorate(ev.result?.action ?? "?");
188
+ const tool = ev.action ?? "?";
189
+ const constraint = ev.constraint ?? "";
190
+ const score = typeof ev.result?.score === "number" ? ` score=${ev.result.score.toFixed(2)}` : "";
191
+ process.stdout.write(` ${ts} ${pipeline} ${action} ${tool}${score}\n`);
192
+ if (constraint)
193
+ process.stdout.write(` └─ ${constraint}\n`);
194
+ }
195
+ }
196
+ //# sourceMappingURL=replay.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"replay.js","sourceRoot":"","sources":["../../src/cli/replay.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,57 @@
1
+ /**
2
+ * ``sponsio report`` — minimal shadow-mode report for TS projects.
3
+ *
4
+ * Reads ``~/.sponsio/sessions/<agent_id>/*.jsonl`` (the shared
5
+ * session log written by both the Python and TypeScript runtimes)
6
+ * and prints a markdown summary of blocks / would-have-blocks over
7
+ * a time window. Keeps the TypeScript-first track self-contained
8
+ * so ``npm`` users can answer "what did my agent try to do yesterday?"
9
+ * without first installing the Python CLI.
10
+ *
11
+ * Usage:
12
+ *
13
+ * sponsio report # last 7d, all agents
14
+ * sponsio report --agent support_bot --since 24h
15
+ * sponsio report --since all --format json
16
+ *
17
+ * Accepts both Python-canonical action values (``blocked`` / ``observed``
18
+ * / ``allowed``) and the TS logger's shorthand (``block`` / ``observe_log``
19
+ * / ``allow``). Files with unknown shapes are skipped silently.
20
+ */
21
+ interface ReportEvent {
22
+ ts: number;
23
+ agentId: string;
24
+ constraint: string;
25
+ action: "blocked" | "observed" | "allowed" | "other";
26
+ message: string;
27
+ }
28
+ interface AgentSummary {
29
+ agentId: string;
30
+ total: number;
31
+ blocks: number;
32
+ observed: number;
33
+ allowed: number;
34
+ /** Violations grouped by constraint desc, newest first. */
35
+ perConstraint: Array<{
36
+ constraint: string;
37
+ blocked: number;
38
+ observed: number;
39
+ latestMessage: string;
40
+ latestTs: number;
41
+ }>;
42
+ }
43
+ declare function parseSince(spec: string, now?: number): number;
44
+ declare function normalizeAction(raw: unknown): ReportEvent["action"];
45
+ declare function aggregate(events: ReportEvent[]): AgentSummary[];
46
+ declare function renderMarkdown(summaries: AgentSummary[], since: string): string;
47
+ declare function renderJson(summaries: AgentSummary[]): string;
48
+ export declare function runReportCli(argv: string[]): Promise<void>;
49
+ export declare const _internals: {
50
+ parseSince: typeof parseSince;
51
+ normalizeAction: typeof normalizeAction;
52
+ aggregate: typeof aggregate;
53
+ renderMarkdown: typeof renderMarkdown;
54
+ renderJson: typeof renderJson;
55
+ };
56
+ export {};
57
+ //# sourceMappingURL=report.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"report.d.ts","sourceRoot":"","sources":["../../src/cli/report.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAQH,UAAU,WAAW;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,SAAS,GAAG,UAAU,GAAG,SAAS,GAAG,OAAO,CAAC;IACrD,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,UAAU,YAAY;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,2DAA2D;IAC3D,aAAa,EAAE,KAAK,CAAC;QACnB,UAAU,EAAE,MAAM,CAAC;QACnB,OAAO,EAAE,MAAM,CAAC;QAChB,QAAQ,EAAE,MAAM,CAAC;QACjB,aAAa,EAAE,MAAM,CAAC;QACtB,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC,CAAC;CACJ;AA0DD,iBAAS,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,GAAE,MAA0B,GAAG,MAAM,CAYzE;AAED,iBAAS,eAAe,CAAC,GAAG,EAAE,OAAO,GAAG,WAAW,CAAC,QAAQ,CAAC,CAyB5D;AAiED,iBAAS,SAAS,CAAC,MAAM,EAAE,WAAW,EAAE,GAAG,YAAY,EAAE,CAyDxD;AAED,iBAAS,cAAc,CAAC,SAAS,EAAE,YAAY,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CA+BxE;AAED,iBAAS,UAAU,CAAC,SAAS,EAAE,YAAY,EAAE,GAAG,MAAM,CAErD;AAED,wBAAsB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAuBhE;AAGD,eAAO,MAAM,UAAU;;;;;;CAMtB,CAAC"}
@@ -0,0 +1,298 @@
1
+ "use strict";
2
+ /**
3
+ * ``sponsio report`` — minimal shadow-mode report for TS projects.
4
+ *
5
+ * Reads ``~/.sponsio/sessions/<agent_id>/*.jsonl`` (the shared
6
+ * session log written by both the Python and TypeScript runtimes)
7
+ * and prints a markdown summary of blocks / would-have-blocks over
8
+ * a time window. Keeps the TypeScript-first track self-contained
9
+ * so ``npm`` users can answer "what did my agent try to do yesterday?"
10
+ * without first installing the Python CLI.
11
+ *
12
+ * Usage:
13
+ *
14
+ * sponsio report # last 7d, all agents
15
+ * sponsio report --agent support_bot --since 24h
16
+ * sponsio report --since all --format json
17
+ *
18
+ * Accepts both Python-canonical action values (``blocked`` / ``observed``
19
+ * / ``allowed``) and the TS logger's shorthand (``block`` / ``observe_log``
20
+ * / ``allow``). Files with unknown shapes are skipped silently.
21
+ */
22
+ Object.defineProperty(exports, "__esModule", { value: true });
23
+ exports._internals = void 0;
24
+ exports.runReportCli = runReportCli;
25
+ const node_fs_1 = require("node:fs");
26
+ const node_os_1 = require("node:os");
27
+ const node_path_1 = require("node:path");
28
+ const SINCE_RE = /^(\d+)([smhd])$/;
29
+ const HELP = [
30
+ "sponsio report — shadow-mode summary of session logs",
31
+ "",
32
+ "USAGE:",
33
+ " sponsio report [options]",
34
+ "",
35
+ "OPTIONS:",
36
+ " --since <spec> Time window (default: 7d). Accepts 'all', '30m', '24h', '7d'.",
37
+ " --agent <id> Only include this agent_id",
38
+ " --base-dir <path> Override session log dir (default: ~/.sponsio/sessions)",
39
+ " --format <fmt> 'markdown' (default) or 'json'",
40
+ " -h, --help Show this help",
41
+ "",
42
+ "EXAMPLES:",
43
+ " sponsio report",
44
+ " sponsio report --since 24h --agent support_bot",
45
+ " sponsio report --since all --format json",
46
+ ].join("\n") + "\n";
47
+ function parseArgs(argv) {
48
+ const a = { since: "7d", format: "markdown", help: false };
49
+ const needValue = (flag, i) => {
50
+ const v = argv[i];
51
+ if (v === undefined || v.startsWith("-")) {
52
+ throw new Error(`${flag} expects a value`);
53
+ }
54
+ return v;
55
+ };
56
+ for (let i = 0; i < argv.length; i++) {
57
+ const flag = argv[i];
58
+ if (flag === "-h" || flag === "--help")
59
+ a.help = true;
60
+ else if (flag === "--since")
61
+ a.since = needValue(flag, ++i);
62
+ else if (flag === "--agent")
63
+ a.agent = needValue(flag, ++i);
64
+ else if (flag === "--base-dir")
65
+ a.baseDir = needValue(flag, ++i);
66
+ else if (flag === "--format") {
67
+ const v = needValue(flag, ++i);
68
+ if (v !== "markdown" && v !== "json") {
69
+ throw new Error(`--format must be 'markdown' or 'json', got ${v}`);
70
+ }
71
+ a.format = v;
72
+ }
73
+ else {
74
+ throw new Error(`unknown flag: ${flag}`);
75
+ }
76
+ }
77
+ return a;
78
+ }
79
+ function parseSince(spec, now = Date.now() / 1000) {
80
+ if (!spec || spec.toLowerCase() === "all")
81
+ return 0;
82
+ const m = SINCE_RE.exec(spec.trim().toLowerCase());
83
+ if (!m) {
84
+ throw new Error(`Invalid --since value: ${spec}. Expected 'all' or a duration like '30m', '24h', '7d'.`);
85
+ }
86
+ const n = parseInt(m[1], 10);
87
+ const unit = m[2];
88
+ const mult = unit === "s" ? 1 : unit === "m" ? 60 : unit === "h" ? 3600 : 86400;
89
+ return now - n * mult;
90
+ }
91
+ function normalizeAction(raw) {
92
+ if (typeof raw !== "string")
93
+ return "other";
94
+ // Accept the full set of Python ``ResultAction`` values alongside
95
+ // the TS shorthand, so a single JSONL emitted by either runtime
96
+ // (or a mix) reduces consistently. Sto-pipeline actions
97
+ // (``escalated``, ``retrying``, ``redirected``) all count as
98
+ // violations — they mean the original action didn't pass through
99
+ // as requested — so group them with ``blocked`` / ``observed``.
100
+ switch (raw) {
101
+ case "blocked":
102
+ case "block":
103
+ case "escalated":
104
+ case "redirected":
105
+ return "blocked";
106
+ case "observed":
107
+ case "observe_log":
108
+ case "retrying":
109
+ return "observed";
110
+ case "allowed":
111
+ case "allow":
112
+ case "warned":
113
+ return "allowed";
114
+ default:
115
+ return "other";
116
+ }
117
+ }
118
+ async function* walkSessionFiles(base, agent) {
119
+ let agentDirs;
120
+ try {
121
+ agentDirs = await node_fs_1.promises.readdir(base);
122
+ }
123
+ catch {
124
+ return;
125
+ }
126
+ for (const dir of agentDirs) {
127
+ if (agent && dir !== agent)
128
+ continue;
129
+ const full = (0, node_path_1.join)(base, dir);
130
+ let inner;
131
+ try {
132
+ const st = await node_fs_1.promises.stat(full);
133
+ if (!st.isDirectory())
134
+ continue;
135
+ inner = await node_fs_1.promises.readdir(full);
136
+ }
137
+ catch {
138
+ continue;
139
+ }
140
+ for (const f of inner) {
141
+ if (f.endsWith(".jsonl"))
142
+ yield (0, node_path_1.join)(full, f);
143
+ }
144
+ }
145
+ }
146
+ async function loadEvents(base, agent, sinceTs) {
147
+ const out = [];
148
+ for await (const path of walkSessionFiles(base, agent)) {
149
+ let text;
150
+ try {
151
+ text = await node_fs_1.promises.readFile(path, "utf8");
152
+ }
153
+ catch {
154
+ continue;
155
+ }
156
+ for (const line of text.split("\n")) {
157
+ if (!line.trim())
158
+ continue;
159
+ let rec;
160
+ try {
161
+ rec = JSON.parse(line);
162
+ }
163
+ catch {
164
+ continue;
165
+ }
166
+ const ts = Number(rec.ts ?? 0);
167
+ if (!Number.isFinite(ts) || ts < sinceTs)
168
+ continue;
169
+ const result = (rec.result ?? {});
170
+ out.push({
171
+ ts,
172
+ agentId: String(rec.agent_id ?? ""),
173
+ constraint: String(rec.constraint ?? ""),
174
+ action: normalizeAction(result.action),
175
+ message: String(result.message ?? ""),
176
+ });
177
+ }
178
+ }
179
+ return out;
180
+ }
181
+ function aggregate(events) {
182
+ const byAgent = new Map();
183
+ for (const e of events) {
184
+ const list = byAgent.get(e.agentId) ?? [];
185
+ list.push(e);
186
+ byAgent.set(e.agentId, list);
187
+ }
188
+ const summaries = [];
189
+ for (const [agentId, evs] of byAgent) {
190
+ let blocks = 0;
191
+ let observed = 0;
192
+ let allowed = 0;
193
+ const perConstraint = new Map();
194
+ for (const e of evs) {
195
+ if (e.action === "blocked")
196
+ blocks++;
197
+ else if (e.action === "observed")
198
+ observed++;
199
+ else if (e.action === "allowed")
200
+ allowed++;
201
+ if (e.action === "blocked" || e.action === "observed") {
202
+ const key = e.constraint || "(unknown)";
203
+ const row = perConstraint.get(key) ?? {
204
+ constraint: key,
205
+ blocked: 0,
206
+ observed: 0,
207
+ latestMessage: "",
208
+ latestTs: 0,
209
+ };
210
+ if (e.action === "blocked")
211
+ row.blocked++;
212
+ else
213
+ row.observed++;
214
+ if (e.ts > row.latestTs) {
215
+ row.latestTs = e.ts;
216
+ row.latestMessage = e.message;
217
+ }
218
+ perConstraint.set(key, row);
219
+ }
220
+ }
221
+ summaries.push({
222
+ agentId,
223
+ total: evs.length,
224
+ blocks,
225
+ observed,
226
+ allowed,
227
+ perConstraint: [...perConstraint.values()].sort((a, b) => b.latestTs - a.latestTs),
228
+ });
229
+ }
230
+ return summaries.sort((a, b) => a.agentId.localeCompare(b.agentId));
231
+ }
232
+ function renderMarkdown(summaries, since) {
233
+ if (summaries.length === 0) {
234
+ return `# Sponsio report\n\nNo session events in window (--since ${since}).\n`;
235
+ }
236
+ const lines = [];
237
+ lines.push(`# Sponsio report`);
238
+ lines.push(`_Window: last ${since} · ${summaries.length} agent(s)_`);
239
+ lines.push("");
240
+ for (const s of summaries) {
241
+ lines.push(`## ${s.agentId}`);
242
+ lines.push(`- total events: **${s.total}** (allowed ${s.allowed} · ` +
243
+ `would-block ${s.observed} · blocked ${s.blocks})`);
244
+ if (s.perConstraint.length === 0) {
245
+ lines.push(`- no violations in window`);
246
+ }
247
+ else {
248
+ lines.push(`- violations by contract:`);
249
+ for (const c of s.perConstraint) {
250
+ const parts = [];
251
+ if (c.blocked)
252
+ parts.push(`${c.blocked} blocked`);
253
+ if (c.observed)
254
+ parts.push(`${c.observed} would-block`);
255
+ lines.push(` - \`${c.constraint}\` — ${parts.join(" · ")}`);
256
+ if (c.latestMessage) {
257
+ lines.push(` latest: ${c.latestMessage}`);
258
+ }
259
+ }
260
+ }
261
+ lines.push("");
262
+ }
263
+ return lines.join("\n");
264
+ }
265
+ function renderJson(summaries) {
266
+ return JSON.stringify({ agents: summaries }, null, 2) + "\n";
267
+ }
268
+ async function runReportCli(argv) {
269
+ let args;
270
+ try {
271
+ args = parseArgs(argv);
272
+ }
273
+ catch (err) {
274
+ process.stderr.write(`${err instanceof Error ? err.message : String(err)}\n`);
275
+ process.exit(2);
276
+ }
277
+ if (args.help) {
278
+ process.stdout.write(HELP);
279
+ return;
280
+ }
281
+ const sinceTs = parseSince(args.since);
282
+ const base = args.baseDir ?? (0, node_path_1.join)((0, node_os_1.homedir)(), ".sponsio", "sessions");
283
+ const events = await loadEvents(base, args.agent, sinceTs);
284
+ const summaries = aggregate(events);
285
+ const out = args.format === "json"
286
+ ? renderJson(summaries)
287
+ : renderMarkdown(summaries, args.since);
288
+ process.stdout.write(out);
289
+ }
290
+ // Exported for tests.
291
+ exports._internals = {
292
+ parseSince,
293
+ normalizeAction,
294
+ aggregate,
295
+ renderMarkdown,
296
+ renderJson,
297
+ };
298
+ //# sourceMappingURL=report.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"report.js","sourceRoot":"","sources":["../../src/cli/report.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function runScanCli(argv: string[]): Promise<void>;
2
+ //# sourceMappingURL=scan.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scan.d.ts","sourceRoot":"","sources":["../../src/cli/scan.ts"],"names":[],"mappings":"AAgHA,wBAAsB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA2C9D"}