@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.
- package/bin/sponsio.cjs +11 -0
- package/contracts/benchmark/agentdojo.yaml +551 -0
- package/contracts/benchmark/odcv_bench.yaml +393 -0
- package/contracts/benchmark/redcode_exec.yaml +488 -0
- package/contracts/benchmark/swebench.yaml +176 -0
- package/contracts/benchmark/tau2_bench.yaml +984 -0
- package/contracts/capability/credentials.yaml +8 -8
- package/contracts/capability/database.yaml +6 -6
- package/contracts/capability/filesystem-strict.yaml +4 -4
- package/contracts/capability/filesystem.yaml +9 -9
- package/contracts/capability/host-config-integrity.yaml +285 -0
- package/contracts/capability/self-modify.yaml +214 -9
- package/contracts/capability/shell.yaml +25 -32
- package/contracts/capability/subagent.yaml +5 -5
- package/contracts/core/llm_safety.yaml +21 -13
- package/contracts/incident/claude-code-secret-bypass.yaml +11 -12
- package/contracts/incident/cursor-railway-wipe.yaml +3 -3
- package/contracts/incident/mcp-composition.yaml +12 -12
- package/contracts/incident/openclaw.yaml +54 -45
- package/contracts/incident/subagent-escape.yaml +4 -4
- package/contracts/premium/.gitkeep +5 -6
- package/dist/cli/check.d.ts +2 -0
- package/dist/cli/check.d.ts.map +1 -0
- package/dist/cli/check.js +283 -0
- package/dist/cli/check.js.map +1 -0
- package/dist/cli/cli.d.ts +25 -0
- package/dist/cli/cli.d.ts.map +1 -0
- package/dist/cli/cli.js +459 -0
- package/dist/cli/cli.js.map +1 -0
- package/dist/cli/config.d.ts +88 -0
- package/dist/cli/config.d.ts.map +1 -0
- package/dist/cli/config.js +243 -0
- package/dist/cli/config.js.map +1 -0
- package/dist/cli/demo.d.ts +12 -0
- package/dist/cli/demo.d.ts.map +1 -0
- package/dist/cli/demo.js +350 -0
- package/dist/cli/demo.js.map +1 -0
- package/dist/cli/doctor.d.ts +11 -0
- package/dist/cli/doctor.d.ts.map +1 -0
- package/dist/cli/doctor.js +201 -0
- package/dist/cli/doctor.js.map +1 -0
- package/dist/cli/eval.d.ts +2 -0
- package/dist/cli/eval.d.ts.map +1 -0
- package/dist/cli/eval.js +361 -0
- package/dist/cli/eval.js.map +1 -0
- package/dist/cli/explain.d.ts +2 -0
- package/dist/cli/explain.d.ts.map +1 -0
- package/dist/cli/explain.js +266 -0
- package/dist/cli/explain.js.map +1 -0
- package/dist/cli/export-sessions.d.ts +2 -0
- package/dist/cli/export-sessions.d.ts.map +1 -0
- package/dist/cli/export-sessions.js +182 -0
- package/dist/cli/export-sessions.js.map +1 -0
- package/dist/cli/export.d.ts +2 -0
- package/dist/cli/export.d.ts.map +1 -0
- package/dist/cli/export.js +222 -0
- package/dist/cli/export.js.map +1 -0
- package/dist/cli/extractors/common.d.ts +27 -0
- package/dist/cli/extractors/common.d.ts.map +1 -0
- package/dist/cli/extractors/common.js +107 -0
- package/dist/cli/extractors/common.js.map +1 -0
- package/dist/cli/extractors/generic.d.ts +37 -0
- package/dist/cli/extractors/generic.d.ts.map +1 -0
- package/dist/cli/extractors/generic.js +185 -0
- package/dist/cli/extractors/generic.js.map +1 -0
- package/dist/cli/extractors/langchain.d.ts +18 -0
- package/dist/cli/extractors/langchain.d.ts.map +1 -0
- package/dist/cli/extractors/langchain.js +86 -0
- package/dist/cli/extractors/langchain.js.map +1 -0
- package/dist/cli/extractors/vercel.d.ts +17 -0
- package/dist/cli/extractors/vercel.d.ts.map +1 -0
- package/dist/cli/extractors/vercel.js +46 -0
- package/dist/cli/extractors/vercel.js.map +1 -0
- package/dist/cli/index.d.ts +38 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +146 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/init.d.ts +2 -0
- package/dist/cli/init.d.ts.map +1 -0
- package/dist/cli/init.js +177 -0
- package/dist/cli/init.js.map +1 -0
- package/dist/cli/mode.d.ts +2 -0
- package/dist/cli/mode.d.ts.map +1 -0
- package/dist/cli/mode.js +71 -0
- package/dist/cli/mode.js.map +1 -0
- package/dist/cli/onboard.d.ts +88 -0
- package/dist/cli/onboard.d.ts.map +1 -0
- package/dist/cli/onboard.js +758 -0
- package/dist/cli/onboard.js.map +1 -0
- package/dist/cli/otlp.d.ts +27 -0
- package/dist/cli/otlp.d.ts.map +1 -0
- package/dist/cli/otlp.js +79 -0
- package/dist/cli/otlp.js.map +1 -0
- package/dist/cli/package.json +1 -0
- package/dist/cli/packs.d.ts +16 -0
- package/dist/cli/packs.d.ts.map +1 -0
- package/dist/cli/packs.js +184 -0
- package/dist/cli/packs.js.map +1 -0
- package/dist/cli/patterns.d.ts +16 -0
- package/dist/cli/patterns.d.ts.map +1 -0
- package/dist/cli/patterns.js +136 -0
- package/dist/cli/patterns.js.map +1 -0
- package/dist/cli/prompt.d.ts +2 -0
- package/dist/cli/prompt.d.ts.map +1 -0
- package/dist/cli/prompt.js +54 -0
- package/dist/cli/prompt.js.map +1 -0
- package/dist/cli/replay.d.ts +2 -0
- package/dist/cli/replay.d.ts.map +1 -0
- package/dist/cli/replay.js +196 -0
- package/dist/cli/replay.js.map +1 -0
- package/dist/cli/report.d.ts +57 -0
- package/dist/cli/report.d.ts.map +1 -0
- package/dist/cli/report.js +298 -0
- package/dist/cli/report.js.map +1 -0
- package/dist/cli/scan.d.ts +2 -0
- package/dist/cli/scan.d.ts.map +1 -0
- package/dist/cli/scan.js +172 -0
- package/dist/cli/scan.js.map +1 -0
- package/dist/cli/skill.d.ts +15 -0
- package/dist/cli/skill.d.ts.map +1 -0
- package/dist/cli/skill.js +131 -0
- package/dist/cli/skill.js.map +1 -0
- package/dist/cli/tokens.d.ts +31 -0
- package/dist/cli/tokens.d.ts.map +1 -0
- package/dist/cli/tokens.js +73 -0
- package/dist/cli/tokens.js.map +1 -0
- package/dist/cli/types.d.ts +46 -0
- package/dist/cli/types.d.ts.map +1 -0
- package/dist/cli/types.js +3 -0
- package/dist/cli/types.js.map +1 -0
- package/dist/cli/validate.d.ts +19 -0
- package/dist/cli/validate.d.ts.map +1 -0
- package/dist/cli/validate.js +205 -0
- package/dist/cli/validate.js.map +1 -0
- package/dist/cli/zod.d.ts +36 -0
- package/dist/cli/zod.d.ts.map +1 -0
- package/dist/cli/zod.js +226 -0
- package/dist/cli/zod.js.map +1 -0
- package/dist/contract.d.ts +13 -13
- package/dist/contract.d.ts.map +1 -1
- package/dist/contract.js +21 -21
- package/dist/contract.js.map +1 -1
- package/dist/core/config-loader.d.ts +1 -1
- package/dist/core/config-loader.d.ts.map +1 -1
- package/dist/core/config-loader.js +100 -26
- package/dist/core/config-loader.js.map +1 -1
- package/dist/core/evaluator.d.ts +9 -1
- package/dist/core/evaluator.d.ts.map +1 -1
- package/dist/core/evaluator.js +189 -13
- package/dist/core/evaluator.js.map +1 -1
- package/dist/core/formula.d.ts +76 -17
- package/dist/core/formula.d.ts.map +1 -1
- package/dist/core/formula.js +83 -1
- package/dist/core/formula.js.map +1 -1
- package/dist/core/grounding.d.ts +50 -3
- package/dist/core/grounding.d.ts.map +1 -1
- package/dist/core/grounding.js +317 -141
- package/dist/core/grounding.js.map +1 -1
- package/dist/core/nl-parser.d.ts +1 -1
- package/dist/core/nl-parser.d.ts.map +1 -1
- package/dist/core/nl-parser.js +76 -4
- package/dist/core/nl-parser.js.map +1 -1
- package/dist/core/pack-loader.d.ts.map +1 -1
- package/dist/core/pack-loader.js +14 -2
- package/dist/core/pack-loader.js.map +1 -1
- package/dist/core/parser.d.ts.map +1 -1
- package/dist/core/parser.js +30 -1
- package/dist/core/parser.js.map +1 -1
- package/dist/core/pattern-factory.d.ts +4 -4
- package/dist/core/pattern-factory.d.ts.map +1 -1
- package/dist/core/pattern-factory.js +53 -4
- package/dist/core/pattern-factory.js.map +1 -1
- package/dist/core/patterns.d.ts +127 -5
- package/dist/core/patterns.d.ts.map +1 -1
- package/dist/core/patterns.js +267 -3
- package/dist/core/patterns.js.map +1 -1
- package/dist/core/session-log.d.ts.map +1 -1
- package/dist/core/session-log.js +20 -1
- package/dist/core/session-log.js.map +1 -1
- package/dist/core/spans.d.ts +1 -1
- package/dist/core/spans.d.ts.map +1 -1
- package/dist/core/spans.js.map +1 -1
- package/dist/core/sto.d.ts +30 -66
- package/dist/core/sto.d.ts.map +1 -1
- package/dist/core/sto.js +39 -100
- package/dist/core/sto.js.map +1 -1
- package/dist/index.d.ts +83 -33
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +194 -142
- package/dist/index.js.map +1 -1
- package/dist/integrations/openai-agents.d.ts.map +1 -1
- package/dist/integrations/openai-agents.js +6 -4
- package/dist/integrations/openai-agents.js.map +1 -1
- package/dist/integrations/vercel-ai.d.ts.map +1 -1
- package/dist/integrations/vercel-ai.js +21 -3
- package/dist/integrations/vercel-ai.js.map +1 -1
- package/dist/render/tokens.d.ts.map +1 -1
- package/dist/render/tokens.js +1 -0
- package/dist/render/tokens.js.map +1 -1
- package/package.json +35 -7
- package/prompts/onboard.md +246 -0
- package/prompts/scan.md +123 -0
- package/skills/SKILL.md +432 -0
package/dist/cli/scan.js
ADDED
|
@@ -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 @@
|
|
|
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"}
|