@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,172 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.runScanCli = runScanCli;
37
+ /**
38
+ * ``sponsio scan`` — re-mine contracts from code, write/append to yaml.
39
+ *
40
+ * Mirrors the Python ``sponsio scan`` library-maintenance flow: AST
41
+ * scan a path, infer deterministic contracts heuristically, write a
42
+ * sponsio.yaml (or append to an existing one). Used *after* ``onboard``
43
+ * has set up the project, when you've added new tools and want to
44
+ * update the contract list.
45
+ *
46
+ * Differs from the default ``npx sponsio <patterns>`` mode (which
47
+ * emits a tools.json inventory) and from ``onboard`` (first-time
48
+ * setup, prints integration patch + framework detection). This is
49
+ * the maintenance command, silent except for the yaml output.
50
+ */
51
+ const node_fs_1 = require("node:fs");
52
+ const node_path_1 = require("node:path");
53
+ const yaml = __importStar(require("js-yaml"));
54
+ const index_1 = require("./index");
55
+ const onboard_1 = require("./onboard");
56
+ const HELP = "sponsio scan — AST-scan source for tools, write contracts to sponsio.yaml\n" +
57
+ "\n" +
58
+ "USAGE:\n" +
59
+ " sponsio scan <patterns...> [options]\n" +
60
+ "\n" +
61
+ "ARGUMENTS:\n" +
62
+ " <patterns...> Glob(s) or directories to scan (default: src/**/*.{ts,tsx,js,jsx})\n" +
63
+ "\n" +
64
+ "OPTIONS:\n" +
65
+ " -a, --agent <id> Agent id stamped into yaml (default: agent)\n" +
66
+ " -o, --out <file> Output yaml path (default: sponsio.yaml; '-' = stdout)\n" +
67
+ " --append Merge into existing yaml's contracts list (deduped)\n" +
68
+ " --mode <m> runtime.mode if creating a new yaml (default: observe)\n" +
69
+ " -h, --help Show this help\n" +
70
+ "\n" +
71
+ "EXAMPLES:\n" +
72
+ " sponsio scan ./src\n" +
73
+ " sponsio scan 'src/tools/**/*.ts' -o sponsio.yaml\n" +
74
+ " sponsio scan ./src --append\n" +
75
+ " sponsio scan ./src -o - # print to stdout\n";
76
+ function parseArgs(argv) {
77
+ const opts = {
78
+ patterns: [],
79
+ agent: "agent",
80
+ out: "sponsio.yaml",
81
+ append: false,
82
+ mode: "observe",
83
+ };
84
+ for (let i = 0; i < argv.length; i++) {
85
+ const a = argv[i];
86
+ if (a === "-h" || a === "--help") {
87
+ process.stdout.write(HELP);
88
+ process.exit(0);
89
+ }
90
+ if (a === "-a" || a === "--agent") {
91
+ opts.agent = argv[++i];
92
+ continue;
93
+ }
94
+ if (a === "-o" || a === "--out") {
95
+ opts.out = argv[++i];
96
+ continue;
97
+ }
98
+ if (a === "--append") {
99
+ opts.append = true;
100
+ continue;
101
+ }
102
+ if (a === "--mode") {
103
+ const v = argv[++i];
104
+ if (v !== "observe" && v !== "enforce") {
105
+ process.stderr.write(`--mode must be observe|enforce (got ${v})\n`);
106
+ process.exit(2);
107
+ }
108
+ opts.mode = v;
109
+ continue;
110
+ }
111
+ if (a.startsWith("-")) {
112
+ process.stderr.write(`unknown flag: ${a}\n${HELP}`);
113
+ process.exit(2);
114
+ }
115
+ opts.patterns.push(a);
116
+ }
117
+ if (opts.patterns.length === 0) {
118
+ opts.patterns = ["src/**/*.{ts,tsx,js,jsx}"];
119
+ }
120
+ return opts;
121
+ }
122
+ function mergeContracts(existing, fresh) {
123
+ const seen = new Set(existing.map((c) => c.E).filter(Boolean));
124
+ const out = [...existing];
125
+ for (const c of fresh) {
126
+ if (!seen.has(c.E)) {
127
+ out.push(c);
128
+ seen.add(c.E);
129
+ }
130
+ }
131
+ return out;
132
+ }
133
+ async function runScanCli(argv) {
134
+ const opts = parseArgs(argv);
135
+ const so = await (0, index_1.scan)(opts.patterns);
136
+ if (so.diagnostics.length) {
137
+ for (const d of so.diagnostics) {
138
+ process.stderr.write(`[${d.level}] ${d.filepath}:${d.line} ${d.message}\n`);
139
+ }
140
+ }
141
+ const toolNames = so.tools.map((t) => t.function.name);
142
+ let payload;
143
+ if (opts.append && opts.out !== "-" && (0, node_fs_1.existsSync)((0, node_path_1.resolve)(opts.out))) {
144
+ const existing = yaml.load((0, node_fs_1.readFileSync)((0, node_path_1.resolve)(opts.out), "utf-8"));
145
+ const fresh = (0, onboard_1.suggestDetNlContracts)(toolNames);
146
+ const agents = existing.agents ?? {};
147
+ const block = agents[opts.agent] ?? { contracts: [] };
148
+ block.contracts = mergeContracts(block.contracts ?? [], fresh);
149
+ agents[opts.agent] = block;
150
+ existing.agents = agents;
151
+ existing.tools = so.tools;
152
+ payload = existing;
153
+ }
154
+ else {
155
+ payload = (0, onboard_1.buildFallbackPayload)(toolNames, { tools: so.tools }, opts.agent, opts.mode);
156
+ }
157
+ const header = "# Generated by: sponsio scan\n" +
158
+ `# Scanned ${so.tools.length} tool(s) across ${opts.patterns.length} pattern(s).\n` +
159
+ "# Review each contract before flipping to enforce.\n\n";
160
+ const text = header + yaml.dump(payload, { lineWidth: 100 });
161
+ if (opts.out === "-") {
162
+ process.stdout.write(text);
163
+ return;
164
+ }
165
+ const outPath = (0, node_path_1.resolve)(opts.out);
166
+ (0, node_fs_1.writeFileSync)(outPath, text, "utf-8");
167
+ process.stdout.write(`✓ wrote ${outPath}\n` +
168
+ ` tools: ${so.tools.length}\n` +
169
+ ` contracts: ${(payload.agents?.[opts.agent]?.contracts ?? []).length}\n` +
170
+ ` mode: ${payload.runtime?.mode ?? "observe"}\n`);
171
+ }
172
+ //# sourceMappingURL=scan.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scan.js","sourceRoot":"","sources":["../../src/cli/scan.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * ``sponsio skill install`` — drop the universal SKILL.md
3
+ * into Cursor / Claude Code / Codex skill directories so your
4
+ * coding agent knows how to ``onboard`` / ``scan`` /
5
+ * flip-to-enforce on every future project without re-pasting the
6
+ * one-prompt setup.
7
+ *
8
+ * Parity with Python's ``sponsio skill install``. The shipped
9
+ * SKILL.md is universal (covers both Python and TypeScript
10
+ * workflows) and lives at ``<pkg>/skills/SKILL.md`` inside the
11
+ * published ``@sponsio/sdk`` tarball. Available as a
12
+ * cross-language path since either CLI can install it.
13
+ */
14
+ export declare function runSkillCli(argv: string[]): Promise<void>;
15
+ //# sourceMappingURL=skill.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skill.d.ts","sourceRoot":"","sources":["../../src/cli/skill.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAiFH,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAqD/D"}
@@ -0,0 +1,131 @@
1
+ "use strict";
2
+ /**
3
+ * ``sponsio skill install`` — drop the universal SKILL.md
4
+ * into Cursor / Claude Code / Codex skill directories so your
5
+ * coding agent knows how to ``onboard`` / ``scan`` /
6
+ * flip-to-enforce on every future project without re-pasting the
7
+ * one-prompt setup.
8
+ *
9
+ * Parity with Python's ``sponsio skill install``. The shipped
10
+ * SKILL.md is universal (covers both Python and TypeScript
11
+ * workflows) and lives at ``<pkg>/skills/SKILL.md`` inside the
12
+ * published ``@sponsio/sdk`` tarball. Available as a
13
+ * cross-language path since either CLI can install it.
14
+ */
15
+ Object.defineProperty(exports, "__esModule", { value: true });
16
+ exports.runSkillCli = runSkillCli;
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 = [
21
+ "sponsio skill install — install the Sponsio Agent Skill",
22
+ "",
23
+ "USAGE:",
24
+ " sponsio skill install [options]",
25
+ "",
26
+ "OPTIONS:",
27
+ " --tool <name> cursor | claude | codex | all (default: all)",
28
+ " --dest <path> Override install location (skips auto-detect)",
29
+ " --force Overwrite any existing SKILL.md at the target",
30
+ " -h, --help Show this help",
31
+ "",
32
+ "DESTINATIONS:",
33
+ " ~/.cursor/skills/sponsio/ — Cursor",
34
+ " ~/.claude/skills/sponsio/ — Claude Code",
35
+ " ~/.codex/skills/sponsio/ — Codex CLI",
36
+ ].join("\n") + "\n";
37
+ function parseArgs(argv) {
38
+ const action = argv[0];
39
+ if (action !== "install") {
40
+ throw new Error(`sponsio skill: unknown action '${action}' (expected 'install')`);
41
+ }
42
+ const a = {
43
+ action: "install",
44
+ tool: "all",
45
+ force: false,
46
+ help: false,
47
+ };
48
+ for (let i = 1; i < argv.length; i++) {
49
+ const flag = argv[i];
50
+ if (flag === "-h" || flag === "--help")
51
+ a.help = true;
52
+ else if (flag === "--tool") {
53
+ const v = argv[++i];
54
+ if (v !== "cursor" && v !== "claude" && v !== "codex" && v !== "all") {
55
+ throw new Error(`--tool must be cursor|claude|codex|all, got ${v}`);
56
+ }
57
+ a.tool = v;
58
+ }
59
+ else if (flag === "--dest")
60
+ a.dest = argv[++i];
61
+ else if (flag === "--force")
62
+ a.force = true;
63
+ else
64
+ throw new Error(`unknown flag: ${flag}`);
65
+ }
66
+ return a;
67
+ }
68
+ function destinationsForTool(tool) {
69
+ const home = (0, node_os_1.homedir)();
70
+ const all = {
71
+ cursor: (0, node_path_1.join)(home, ".cursor", "skills", "sponsio"),
72
+ claude: (0, node_path_1.join)(home, ".claude", "skills", "sponsio"),
73
+ codex: (0, node_path_1.join)(home, ".codex", "skills", "sponsio"),
74
+ };
75
+ return tool === "all"
76
+ ? [all.cursor, all.claude, all.codex]
77
+ : [all[tool]];
78
+ }
79
+ function resolveSkillSource() {
80
+ // Published layout: ``<pkg>/skills/SKILL.md``. When running from
81
+ // source (monorepo dev), ``__dirname`` is ``ts-scanner/dist`` so
82
+ // ``../skills/SKILL.md`` lands correctly.
83
+ return (0, node_path_1.resolve)(__dirname, "..", "skills", "SKILL.md");
84
+ }
85
+ async function runSkillCli(argv) {
86
+ let args;
87
+ try {
88
+ args = parseArgs(argv);
89
+ }
90
+ catch (err) {
91
+ process.stderr.write(`${err instanceof Error ? err.message : String(err)}\n`);
92
+ process.exit(2);
93
+ }
94
+ if (args.help) {
95
+ process.stdout.write(HELP);
96
+ return;
97
+ }
98
+ const src = resolveSkillSource();
99
+ if (!(0, node_fs_1.existsSync)(src)) {
100
+ process.stderr.write(`[sponsio] cannot locate SKILL.md at ${src} — did you build @sponsio/sdk?\n`);
101
+ process.exit(1);
102
+ }
103
+ const dests = args.dest ? [args.dest] : destinationsForTool(args.tool);
104
+ let installed = 0;
105
+ let skipped = 0;
106
+ for (const dest of dests) {
107
+ // ``--dest`` may point at either a directory or an explicit file
108
+ // path; treat a trailing segment of ``SKILL.md`` as the file form.
109
+ const targetIsFile = !!args.dest && dest.toLowerCase().endsWith("skill.md");
110
+ const target = targetIsFile ? dest : (0, node_path_1.join)(dest, "SKILL.md");
111
+ const targetDir = (0, node_path_1.dirname)(target);
112
+ if ((0, node_fs_1.existsSync)(target) && !args.force) {
113
+ process.stdout.write(` skip ${target} (already exists — pass --force to overwrite)\n`);
114
+ skipped++;
115
+ continue;
116
+ }
117
+ try {
118
+ await node_fs_1.promises.mkdir(targetDir, { recursive: true });
119
+ await node_fs_1.promises.copyFile(src, target);
120
+ process.stdout.write(` ok ${target}\n`);
121
+ installed++;
122
+ }
123
+ catch (err) {
124
+ process.stderr.write(` fail ${target}: ${err instanceof Error ? err.message : err}\n`);
125
+ }
126
+ }
127
+ process.stdout.write(`\nInstalled ${installed}, skipped ${skipped}, out of ${dests.length} target(s).\n`);
128
+ if (installed === 0 && skipped === 0)
129
+ process.exit(1);
130
+ }
131
+ //# sourceMappingURL=skill.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skill.js","sourceRoot":"","sources":["../../src/cli/skill.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Truecolor palette mirroring ``sponsio/render/tokens.py`` so the TS
3
+ * scanner's stdout matches the Python wizard / runtime trace output
4
+ * pixel-for-pixel. Single source of truth on the TS side — every
5
+ * other module in this package imports these helpers instead of
6
+ * sprinkling raw ``\x1b[31m`` / ``\x1b[32m`` codes.
7
+ *
8
+ * If you tweak the Python PALETTE, mirror the change here. The
9
+ * cross-language test suite doesn't enforce parity (no shared
10
+ * runner), so it's a discipline thing.
11
+ */
12
+ export declare const PALETTE: {
13
+ readonly brand: string;
14
+ readonly success: string;
15
+ readonly violation: string;
16
+ readonly warning: string;
17
+ readonly active: string;
18
+ readonly metadata: string;
19
+ readonly muted: string;
20
+ readonly rule: string;
21
+ readonly fg: string;
22
+ };
23
+ export declare const style: {
24
+ brand: (s: string, bold?: boolean) => string;
25
+ success: (s: string, bold?: boolean) => string;
26
+ violation: (s: string, bold?: boolean) => string;
27
+ warning: (s: string, bold?: boolean) => string;
28
+ metadata: (s: string) => string;
29
+ fg: (s: string) => string;
30
+ };
31
+ //# sourceMappingURL=tokens.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tokens.d.ts","sourceRoot":"","sources":["../../src/cli/tokens.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAqBH,eAAO,MAAM,OAAO;;;;;;;;;;CAUV,CAAC;AA0BX,eAAO,MAAM,KAAK;eACL,MAAM;iBACJ,MAAM;mBACJ,MAAM;iBACR,MAAM;kBACL,MAAM;YACZ,MAAM;CACf,CAAC"}
@@ -0,0 +1,73 @@
1
+ "use strict";
2
+ /**
3
+ * Truecolor palette mirroring ``sponsio/render/tokens.py`` so the TS
4
+ * scanner's stdout matches the Python wizard / runtime trace output
5
+ * pixel-for-pixel. Single source of truth on the TS side — every
6
+ * other module in this package imports these helpers instead of
7
+ * sprinkling raw ``\x1b[31m`` / ``\x1b[32m`` codes.
8
+ *
9
+ * If you tweak the Python PALETTE, mirror the change here. The
10
+ * cross-language test suite doesn't enforce parity (no shared
11
+ * runner), so it's a discipline thing.
12
+ */
13
+ Object.defineProperty(exports, "__esModule", { value: true });
14
+ exports.style = exports.PALETTE = void 0;
15
+ /* ─────────────────────────────────────────────────────────────────
16
+ * Truecolor escape helpers — keep payload structure identical to
17
+ * Python's so palette diffs read cleanly.
18
+ * ──────────────────────────────────────────────────────────────── */
19
+ const RESET = "\x1b[0m";
20
+ function rgb(hex) {
21
+ // ``#7DD3FC`` → ``\x1b[38;2;125;211;252m``
22
+ const m = /^#?([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})$/i.exec(hex);
23
+ if (!m)
24
+ throw new Error(`bad hex: ${hex}`);
25
+ const [, r, g, b] = m;
26
+ return `\x1b[38;2;${parseInt(r, 16)};${parseInt(g, 16)};${parseInt(b, 16)}m`;
27
+ }
28
+ /* ─────────────────────────────────────────────────────────────────
29
+ * Palette — keep 1:1 with sponsio/render/tokens.py:PALETTE.
30
+ * ──────────────────────────────────────────────────────────────── */
31
+ exports.PALETTE = {
32
+ brand: rgb("#7DD3FC"), // cyan-300 — banner titles, CTA arrow
33
+ success: rgb("#86EFAC"), // green-300 — ✓, ACTIVE, PASS
34
+ violation: rgb("#FCA5A5"), // red-300 — ✗, BLOCKED, VIOLATED
35
+ warning: rgb("#FCD34D"), // amber-300 — soft fail, watchlist
36
+ active: rgb("#C4B5FD"), // violet-300 — contract state transitions
37
+ metadata: rgb("#64748B"), // slate-500 — timestamps, latencies, hints
38
+ muted: rgb("#94A3B8"), // slate-400 — fallback service label, dim text
39
+ rule: rgb("#475569"), // slate-600 — banner & divider lines
40
+ fg: rgb("#E2E8F0"), // slate-200 — default foreground
41
+ };
42
+ const BOLD = "\x1b[1m";
43
+ /* ─────────────────────────────────────────────────────────────────
44
+ * Convenience wrappers — every place that wants to colorize a string
45
+ * goes through these. Centralized so we can short-circuit when
46
+ * stdout isn't a TTY (`NO_COLOR` env var, piped output) without
47
+ * touching every call site.
48
+ * ──────────────────────────────────────────────────────────────── */
49
+ const colorEnabled = () => {
50
+ if (process.env.NO_COLOR)
51
+ return false;
52
+ // ``TERM=dumb`` is the universal "no escapes" hint.
53
+ if (process.env.TERM === "dumb")
54
+ return false;
55
+ // When stdout is a pipe (`| cat`, CI logs) most colour systems
56
+ // turn off; do the same so byte-identical comparisons in tests
57
+ // don't have to strip escapes.
58
+ return Boolean(process.stdout.isTTY);
59
+ };
60
+ function paint(color, text, { bold = false } = {}) {
61
+ if (!colorEnabled())
62
+ return text;
63
+ return (bold ? BOLD : "") + color + text + RESET;
64
+ }
65
+ exports.style = {
66
+ brand: (s, bold = false) => paint(exports.PALETTE.brand, s, { bold }),
67
+ success: (s, bold = false) => paint(exports.PALETTE.success, s, { bold }),
68
+ violation: (s, bold = false) => paint(exports.PALETTE.violation, s, { bold }),
69
+ warning: (s, bold = false) => paint(exports.PALETTE.warning, s, { bold }),
70
+ metadata: (s) => paint(exports.PALETTE.metadata, s),
71
+ fg: (s) => paint(exports.PALETTE.fg, s),
72
+ };
73
+ //# sourceMappingURL=tokens.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tokens.js","sourceRoot":"","sources":["../../src/cli/tokens.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,46 @@
1
+ /**
2
+ * OpenAI function-calling shape — the common interchange format
3
+ * consumed by `sponsio/discovery/extractors/tool_inventory.py`.
4
+ */
5
+ export interface OpenAITool {
6
+ type: "function";
7
+ function: {
8
+ name: string;
9
+ description: string;
10
+ parameters: JSONSchema;
11
+ };
12
+ }
13
+ export interface ScanOutput {
14
+ /** Tools found in the scanned source files. */
15
+ tools: OpenAITool[];
16
+ /** Per-file diagnostics — empty on a clean run. */
17
+ diagnostics: Diagnostic[];
18
+ /** Which framework-specific extractor produced each tool. */
19
+ provenance: Record<string, ToolProvenance>;
20
+ }
21
+ export interface ToolProvenance {
22
+ filepath: string;
23
+ line: number;
24
+ extractor: "vercel_ai" | "langchain_js" | "generic" | "generic_decorator";
25
+ }
26
+ export interface Diagnostic {
27
+ filepath: string;
28
+ line: number;
29
+ level: "warn" | "error";
30
+ message: string;
31
+ }
32
+ /** Minimal JSON Schema we emit — always a top-level `object`. */
33
+ export interface JSONSchema {
34
+ type: "object";
35
+ properties: Record<string, JSONSchemaProperty>;
36
+ required?: string[];
37
+ }
38
+ export interface JSONSchemaProperty {
39
+ type: JSONSchemaType;
40
+ description?: string;
41
+ items?: JSONSchemaProperty;
42
+ enum?: (string | number | boolean)[];
43
+ properties?: Record<string, JSONSchemaProperty>;
44
+ }
45
+ export type JSONSchemaType = "string" | "number" | "integer" | "boolean" | "array" | "object" | "null";
46
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/cli/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,UAAU,CAAC;IACjB,QAAQ,EAAE;QACR,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,CAAC;QACpB,UAAU,EAAE,UAAU,CAAC;KACxB,CAAC;CACH;AAED,MAAM,WAAW,UAAU;IACzB,+CAA+C;IAC/C,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,mDAAmD;IACnD,WAAW,EAAE,UAAU,EAAE,CAAC;IAC1B,6DAA6D;IAC7D,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;CAC5C;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,WAAW,GAAG,cAAc,GAAG,SAAS,GAAG,mBAAmB,CAAC;CAC3E;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,iEAAiE;AACjE,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,QAAQ,CAAC;IACf,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;IAC/C,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,cAAc,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,kBAAkB,CAAC;IAC3B,IAAI,CAAC,EAAE,CAAC,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,EAAE,CAAC;IACrC,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;CACjD;AAED,MAAM,MAAM,cAAc,GACtB,QAAQ,GACR,QAAQ,GACR,SAAS,GACT,SAAS,GACT,OAAO,GACP,QAAQ,GACR,MAAM,CAAC"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/cli/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * ``sponsio validate`` — CI-friendly config check.
3
+ *
4
+ * Mirrors the first half of Python's ``sponsio validate`` command:
5
+ * parse sponsio.yaml, surface structural errors, and report what
6
+ * the TS runtime can / cannot handle. Exits non-zero when the file
7
+ * doesn't load or when --strict is set and the loader had to skip
8
+ * any unsupported yaml items.
9
+ *
10
+ * Usage:
11
+ *
12
+ * sponsio validate # validates ./sponsio.yaml
13
+ * sponsio validate ./config.yaml
14
+ * sponsio validate --agent support_bot
15
+ * sponsio validate --strict # non-zero on any skip
16
+ * sponsio validate --format json # machine-readable
17
+ */
18
+ export declare function runValidateCli(argv: string[]): Promise<void>;
19
+ //# sourceMappingURL=validate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../src/cli/validate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAiFH,wBAAsB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAsFlE"}