@sponsio/sdk 0.1.0-alpha.3 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (176) hide show
  1. package/bin/sponsio.cjs +11 -0
  2. package/contracts/capability/credentials.yaml +8 -8
  3. package/contracts/capability/database.yaml +6 -6
  4. package/contracts/capability/filesystem-strict.yaml +4 -4
  5. package/contracts/capability/filesystem.yaml +9 -9
  6. package/contracts/capability/host-config-integrity.yaml +285 -0
  7. package/contracts/capability/self-modify.yaml +214 -9
  8. package/contracts/capability/shell.yaml +25 -32
  9. package/contracts/capability/subagent.yaml +5 -5
  10. package/contracts/core/llm_safety.yaml +23 -13
  11. package/contracts/incident/claude-code-secret-bypass.yaml +10 -11
  12. package/contracts/incident/cursor-railway-wipe.yaml +3 -3
  13. package/contracts/incident/mcp-composition.yaml +12 -12
  14. package/contracts/incident/openclaw.yaml +53 -45
  15. package/contracts/incident/subagent-escape.yaml +4 -4
  16. package/dist/cli/check.d.ts +2 -0
  17. package/dist/cli/check.d.ts.map +1 -0
  18. package/dist/cli/check.js +283 -0
  19. package/dist/cli/check.js.map +1 -0
  20. package/dist/cli/cli.d.ts +25 -0
  21. package/dist/cli/cli.d.ts.map +1 -0
  22. package/dist/cli/cli.js +459 -0
  23. package/dist/cli/cli.js.map +1 -0
  24. package/dist/cli/config.d.ts +88 -0
  25. package/dist/cli/config.d.ts.map +1 -0
  26. package/dist/cli/config.js +243 -0
  27. package/dist/cli/config.js.map +1 -0
  28. package/dist/cli/demo.d.ts +12 -0
  29. package/dist/cli/demo.d.ts.map +1 -0
  30. package/dist/cli/demo.js +350 -0
  31. package/dist/cli/demo.js.map +1 -0
  32. package/dist/cli/doctor.d.ts +11 -0
  33. package/dist/cli/doctor.d.ts.map +1 -0
  34. package/dist/cli/doctor.js +201 -0
  35. package/dist/cli/doctor.js.map +1 -0
  36. package/dist/cli/eval.d.ts +2 -0
  37. package/dist/cli/eval.d.ts.map +1 -0
  38. package/dist/cli/eval.js +361 -0
  39. package/dist/cli/eval.js.map +1 -0
  40. package/dist/cli/explain.d.ts +2 -0
  41. package/dist/cli/explain.d.ts.map +1 -0
  42. package/dist/cli/explain.js +266 -0
  43. package/dist/cli/explain.js.map +1 -0
  44. package/dist/cli/export-sessions.d.ts +2 -0
  45. package/dist/cli/export-sessions.d.ts.map +1 -0
  46. package/dist/cli/export-sessions.js +182 -0
  47. package/dist/cli/export-sessions.js.map +1 -0
  48. package/dist/cli/export.d.ts +2 -0
  49. package/dist/cli/export.d.ts.map +1 -0
  50. package/dist/cli/export.js +222 -0
  51. package/dist/cli/export.js.map +1 -0
  52. package/dist/cli/extractors/common.d.ts +27 -0
  53. package/dist/cli/extractors/common.d.ts.map +1 -0
  54. package/dist/cli/extractors/common.js +107 -0
  55. package/dist/cli/extractors/common.js.map +1 -0
  56. package/dist/cli/extractors/generic.d.ts +37 -0
  57. package/dist/cli/extractors/generic.d.ts.map +1 -0
  58. package/dist/cli/extractors/generic.js +185 -0
  59. package/dist/cli/extractors/generic.js.map +1 -0
  60. package/dist/cli/extractors/langchain.d.ts +18 -0
  61. package/dist/cli/extractors/langchain.d.ts.map +1 -0
  62. package/dist/cli/extractors/langchain.js +86 -0
  63. package/dist/cli/extractors/langchain.js.map +1 -0
  64. package/dist/cli/extractors/vercel.d.ts +17 -0
  65. package/dist/cli/extractors/vercel.d.ts.map +1 -0
  66. package/dist/cli/extractors/vercel.js +46 -0
  67. package/dist/cli/extractors/vercel.js.map +1 -0
  68. package/dist/cli/index.d.ts +38 -0
  69. package/dist/cli/index.d.ts.map +1 -0
  70. package/dist/cli/index.js +146 -0
  71. package/dist/cli/index.js.map +1 -0
  72. package/dist/cli/init.d.ts +2 -0
  73. package/dist/cli/init.d.ts.map +1 -0
  74. package/dist/cli/init.js +177 -0
  75. package/dist/cli/init.js.map +1 -0
  76. package/dist/cli/mode.d.ts +2 -0
  77. package/dist/cli/mode.d.ts.map +1 -0
  78. package/dist/cli/mode.js +71 -0
  79. package/dist/cli/mode.js.map +1 -0
  80. package/dist/cli/onboard.d.ts +88 -0
  81. package/dist/cli/onboard.d.ts.map +1 -0
  82. package/dist/cli/onboard.js +758 -0
  83. package/dist/cli/onboard.js.map +1 -0
  84. package/dist/cli/otlp.d.ts +27 -0
  85. package/dist/cli/otlp.d.ts.map +1 -0
  86. package/dist/cli/otlp.js +79 -0
  87. package/dist/cli/otlp.js.map +1 -0
  88. package/dist/cli/package.json +1 -0
  89. package/dist/cli/packs.d.ts +16 -0
  90. package/dist/cli/packs.d.ts.map +1 -0
  91. package/dist/cli/packs.js +184 -0
  92. package/dist/cli/packs.js.map +1 -0
  93. package/dist/cli/patterns.d.ts +15 -0
  94. package/dist/cli/patterns.d.ts.map +1 -0
  95. package/dist/cli/patterns.js +135 -0
  96. package/dist/cli/patterns.js.map +1 -0
  97. package/dist/cli/prompt.d.ts +2 -0
  98. package/dist/cli/prompt.d.ts.map +1 -0
  99. package/dist/cli/prompt.js +54 -0
  100. package/dist/cli/prompt.js.map +1 -0
  101. package/dist/cli/replay.d.ts +2 -0
  102. package/dist/cli/replay.d.ts.map +1 -0
  103. package/dist/cli/replay.js +196 -0
  104. package/dist/cli/replay.js.map +1 -0
  105. package/dist/cli/report.d.ts +57 -0
  106. package/dist/cli/report.d.ts.map +1 -0
  107. package/dist/cli/report.js +298 -0
  108. package/dist/cli/report.js.map +1 -0
  109. package/dist/cli/scan.d.ts +2 -0
  110. package/dist/cli/scan.d.ts.map +1 -0
  111. package/dist/cli/scan.js +172 -0
  112. package/dist/cli/scan.js.map +1 -0
  113. package/dist/cli/skill.d.ts +15 -0
  114. package/dist/cli/skill.d.ts.map +1 -0
  115. package/dist/cli/skill.js +131 -0
  116. package/dist/cli/skill.js.map +1 -0
  117. package/dist/cli/tokens.d.ts +31 -0
  118. package/dist/cli/tokens.d.ts.map +1 -0
  119. package/dist/cli/tokens.js +73 -0
  120. package/dist/cli/tokens.js.map +1 -0
  121. package/dist/cli/types.d.ts +46 -0
  122. package/dist/cli/types.d.ts.map +1 -0
  123. package/dist/cli/types.js +3 -0
  124. package/dist/cli/types.js.map +1 -0
  125. package/dist/cli/validate.d.ts +19 -0
  126. package/dist/cli/validate.d.ts.map +1 -0
  127. package/dist/cli/validate.js +205 -0
  128. package/dist/cli/validate.js.map +1 -0
  129. package/dist/cli/zod.d.ts +36 -0
  130. package/dist/cli/zod.d.ts.map +1 -0
  131. package/dist/cli/zod.js +226 -0
  132. package/dist/cli/zod.js.map +1 -0
  133. package/dist/contract.d.ts +13 -13
  134. package/dist/contract.d.ts.map +1 -1
  135. package/dist/contract.js +21 -21
  136. package/dist/contract.js.map +1 -1
  137. package/dist/core/config-loader.d.ts +1 -1
  138. package/dist/core/config-loader.js +35 -17
  139. package/dist/core/config-loader.js.map +1 -1
  140. package/dist/core/grounding.d.ts +49 -2
  141. package/dist/core/grounding.d.ts.map +1 -1
  142. package/dist/core/grounding.js +302 -142
  143. package/dist/core/grounding.js.map +1 -1
  144. package/dist/core/nl-parser.d.ts.map +1 -1
  145. package/dist/core/nl-parser.js +74 -2
  146. package/dist/core/nl-parser.js.map +1 -1
  147. package/dist/core/pattern-factory.d.ts +4 -4
  148. package/dist/core/pattern-factory.d.ts.map +1 -1
  149. package/dist/core/pattern-factory.js +46 -4
  150. package/dist/core/pattern-factory.js.map +1 -1
  151. package/dist/core/patterns.d.ts +78 -4
  152. package/dist/core/patterns.d.ts.map +1 -1
  153. package/dist/core/patterns.js +211 -3
  154. package/dist/core/patterns.js.map +1 -1
  155. package/dist/core/spans.d.ts +1 -1
  156. package/dist/core/spans.d.ts.map +1 -1
  157. package/dist/core/spans.js.map +1 -1
  158. package/dist/core/sto.d.ts +32 -62
  159. package/dist/core/sto.d.ts.map +1 -1
  160. package/dist/core/sto.js +32 -90
  161. package/dist/core/sto.js.map +1 -1
  162. package/dist/index.d.ts +77 -32
  163. package/dist/index.d.ts.map +1 -1
  164. package/dist/index.js +172 -133
  165. package/dist/index.js.map +1 -1
  166. package/dist/integrations/openai-agents.d.ts.map +1 -1
  167. package/dist/integrations/openai-agents.js +5 -4
  168. package/dist/integrations/openai-agents.js.map +1 -1
  169. package/dist/render/tokens.d.ts.map +1 -1
  170. package/dist/render/tokens.js +1 -0
  171. package/dist/render/tokens.js.map +1 -1
  172. package/package.json +28 -4
  173. package/prompts/onboard.md +250 -0
  174. package/prompts/refresh.md +118 -0
  175. package/prompts/scan.md +125 -0
  176. package/skills/SKILL.md +502 -0
@@ -0,0 +1,86 @@
1
+ "use strict";
2
+ /**
3
+ * LangChain.js tool extractor.
4
+ *
5
+ * Matches:
6
+ *
7
+ * new DynamicStructuredTool({ name, description, schema, func })
8
+ * new DynamicTool({ name, description, func })
9
+ * tool(fn, { name, description, schema }) — LangGraph.js v0.2+
10
+ *
11
+ * The ``schema`` field is a Zod object we convert via ``zod.ts``.
12
+ */
13
+ Object.defineProperty(exports, "__esModule", { value: true });
14
+ exports.extractLangChainTools = extractLangChainTools;
15
+ const ts_morph_1 = require("ts-morph");
16
+ const common_1 = require("./common");
17
+ const STRUCTURED_NAMES = new Set([
18
+ "DynamicStructuredTool",
19
+ "StructuredTool",
20
+ ]);
21
+ const BASIC_NAMES = new Set(["DynamicTool"]);
22
+ function extractLangChainTools(sourceFile) {
23
+ const found = [];
24
+ // --- 1. new DynamicStructuredTool({...}) / new DynamicTool({...}) ---
25
+ sourceFile.forEachDescendant((node) => {
26
+ if (!ts_morph_1.Node.isNewExpression(node))
27
+ return;
28
+ const ctor = node.getExpression();
29
+ if (!ts_morph_1.Node.isIdentifier(ctor))
30
+ return;
31
+ const ctorName = ctor.getText();
32
+ if (!STRUCTURED_NAMES.has(ctorName) && !BASIC_NAMES.has(ctorName))
33
+ return;
34
+ const arg = node.getArguments()[0];
35
+ if (!arg || !ts_morph_1.Node.isObjectLiteralExpression(arg))
36
+ return;
37
+ const inferred = (0, common_1.inferNameFromAssignment)(node);
38
+ const tool = (0, common_1.objectArgToTool)(arg, inferred, {
39
+ schemaKeys: ["schema", "parameters", "inputSchema"],
40
+ });
41
+ if (!tool)
42
+ return;
43
+ found.push({
44
+ tool,
45
+ provenance: {
46
+ filepath: sourceFile.getFilePath(),
47
+ line: node.getStartLineNumber(),
48
+ extractor: "langchain_js",
49
+ },
50
+ });
51
+ });
52
+ // --- 2. tool(fn, { name, description, schema }) — LangGraph.js v0.2+
53
+ //
54
+ // Distinguished from Vercel's ``tool({...})`` by the arity and the
55
+ // shape of the *first* argument: LangGraph takes the function first
56
+ // and the config second; Vercel passes a single object.
57
+ sourceFile.forEachDescendant((node) => {
58
+ if (!ts_morph_1.Node.isCallExpression(node))
59
+ return;
60
+ const callee = node.getExpression();
61
+ if (!ts_morph_1.Node.isIdentifier(callee) || callee.getText() !== "tool")
62
+ return;
63
+ const args = node.getArguments();
64
+ if (args.length < 2)
65
+ return;
66
+ const config = args[1];
67
+ if (!ts_morph_1.Node.isObjectLiteralExpression(config))
68
+ return;
69
+ const inferred = (0, common_1.inferNameFromAssignment)(node);
70
+ const tool = (0, common_1.objectArgToTool)(config, inferred, {
71
+ schemaKeys: ["schema", "parameters", "inputSchema"],
72
+ });
73
+ if (!tool)
74
+ return;
75
+ found.push({
76
+ tool,
77
+ provenance: {
78
+ filepath: sourceFile.getFilePath(),
79
+ line: node.getStartLineNumber(),
80
+ extractor: "langchain_js",
81
+ },
82
+ });
83
+ });
84
+ return found;
85
+ }
86
+ //# sourceMappingURL=langchain.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"langchain.js","sourceRoot":"","sources":["../../../src/cli/extractors/langchain.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Vercel AI SDK tool extractor.
3
+ *
4
+ * Matches ``tool({ description, parameters, execute })`` — the shape
5
+ * documented at https://sdk.vercel.ai/docs/ai-sdk-core/tools. The
6
+ * ``name`` is usually inferred from the variable the call is assigned
7
+ * to (``const lookupCustomer = tool({...})``) because Vercel's SDK
8
+ * uses the object key in ``tools: { foo: tool({...}) }`` as the
9
+ * canonical tool name.
10
+ */
11
+ import { SourceFile } from "ts-morph";
12
+ import type { OpenAITool, ToolProvenance } from "../types";
13
+ export declare function extractVercelTools(sourceFile: SourceFile): {
14
+ tool: OpenAITool;
15
+ provenance: ToolProvenance;
16
+ }[];
17
+ //# sourceMappingURL=vercel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vercel.d.ts","sourceRoot":"","sources":["../../../src/cli/extractors/vercel.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAQ,UAAU,EAAE,MAAM,UAAU,CAAC;AAE5C,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAE3D,wBAAgB,kBAAkB,CAChC,UAAU,EAAE,UAAU,GACrB;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,UAAU,EAAE,cAAc,CAAA;CAAE,EAAE,CA6BpD"}
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+ /**
3
+ * Vercel AI SDK tool extractor.
4
+ *
5
+ * Matches ``tool({ description, parameters, execute })`` — the shape
6
+ * documented at https://sdk.vercel.ai/docs/ai-sdk-core/tools. The
7
+ * ``name`` is usually inferred from the variable the call is assigned
8
+ * to (``const lookupCustomer = tool({...})``) because Vercel's SDK
9
+ * uses the object key in ``tools: { foo: tool({...}) }`` as the
10
+ * canonical tool name.
11
+ */
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ exports.extractVercelTools = extractVercelTools;
14
+ const ts_morph_1 = require("ts-morph");
15
+ const common_1 = require("./common");
16
+ function extractVercelTools(sourceFile) {
17
+ const found = [];
18
+ sourceFile.forEachDescendant((node) => {
19
+ if (!ts_morph_1.Node.isCallExpression(node))
20
+ return;
21
+ const callee = node.getExpression();
22
+ if (!ts_morph_1.Node.isIdentifier(callee))
23
+ return;
24
+ if (callee.getText() !== "tool")
25
+ return;
26
+ const arg = node.getArguments()[0];
27
+ if (!arg || !ts_morph_1.Node.isObjectLiteralExpression(arg))
28
+ return;
29
+ const name = (0, common_1.inferNameFromAssignment)(node);
30
+ const tool = (0, common_1.objectArgToTool)(arg, name, {
31
+ schemaKeys: ["parameters", "inputSchema"],
32
+ });
33
+ if (!tool)
34
+ return;
35
+ found.push({
36
+ tool,
37
+ provenance: {
38
+ filepath: sourceFile.getFilePath(),
39
+ line: node.getStartLineNumber(),
40
+ extractor: "vercel_ai",
41
+ },
42
+ });
43
+ });
44
+ return found;
45
+ }
46
+ //# sourceMappingURL=vercel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vercel.js","sourceRoot":"","sources":["../../../src/cli/extractors/vercel.ts"],"names":[],"mappings":";AAAA;;;;;;;;;GASG;;AAMH,gDA+BC;AAnCD,uCAA4C;AAC5C,qCAAoE;AAGpE,SAAgB,kBAAkB,CAChC,UAAsB;IAEtB,MAAM,KAAK,GAAuD,EAAE,CAAC;IAErE,UAAU,CAAC,iBAAiB,CAAC,CAAC,IAAI,EAAE,EAAE;QACpC,IAAI,CAAC,eAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC;YAAE,OAAO;QAEzC,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;QACpC,IAAI,CAAC,eAAI,CAAC,YAAY,CAAC,MAAM,CAAC;YAAE,OAAO;QACvC,IAAI,MAAM,CAAC,OAAO,EAAE,KAAK,MAAM;YAAE,OAAO;QAExC,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,CAAC;QACnC,IAAI,CAAC,GAAG,IAAI,CAAC,eAAI,CAAC,yBAAyB,CAAC,GAAG,CAAC;YAAE,OAAO;QAEzD,MAAM,IAAI,GAAG,IAAA,gCAAuB,EAAC,IAAI,CAAC,CAAC;QAC3C,MAAM,IAAI,GAAG,IAAA,wBAAe,EAAC,GAAG,EAAE,IAAI,EAAE;YACtC,UAAU,EAAE,CAAC,YAAY,EAAE,aAAa,CAAC;SAC1C,CAAC,CAAC;QACH,IAAI,CAAC,IAAI;YAAE,OAAO;QAClB,KAAK,CAAC,IAAI,CAAC;YACT,IAAI;YACJ,UAAU,EAAE;gBACV,QAAQ,EAAE,UAAU,CAAC,WAAW,EAAE;gBAClC,IAAI,EAAE,IAAI,CAAC,kBAAkB,EAAE;gBAC/B,SAAS,EAAE,WAAW;aACvB;SACF,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -0,0 +1,38 @@
1
+ /**
2
+ * Public API for ``@sponsio/sdk``.
3
+ *
4
+ * Usage:
5
+ *
6
+ * import { scan } from "@sponsio/sdk";
7
+ * const result = await scan(["src/**\/*.ts"]);
8
+ * console.log(JSON.stringify(result, null, 2));
9
+ *
10
+ * The emitted ``{ tools: [...] }`` object is directly consumable by
11
+ * ``sponsio scan <file.json>`` — see the Python-side loader at
12
+ * ``sponsio/discovery/extractors/tool_inventory.py``.
13
+ */
14
+ import type { Diagnostic, OpenAITool, ScanOutput, ToolProvenance } from "./types";
15
+ export type { OpenAITool, ScanOutput, ToolProvenance, Diagnostic };
16
+ export interface ScanOptions {
17
+ /** Working directory used to resolve relative globs. Defaults to ``process.cwd()``. */
18
+ cwd?: string;
19
+ /** Glob patterns to exclude (applied on top of defaults). */
20
+ ignore?: string[];
21
+ }
22
+ /**
23
+ * Scan one or more file globs for agent tool definitions.
24
+ *
25
+ * Only static AST inspection — we never execute user code, so
26
+ * dynamically-constructed tools (computed names, schemas built at
27
+ * runtime) won't be picked up. For those, emit the tool inventory
28
+ * by running the Node process directly and calling ``JSON.stringify``
29
+ * on your tools array.
30
+ */
31
+ export declare function scan(patterns: string[], options?: ScanOptions): Promise<ScanOutput>;
32
+ /**
33
+ * Re-exported after ``scan`` is defined to avoid a circular
34
+ * `index → onboard → index` import while ``scan`` is still in TDZ.
35
+ */
36
+ export { runOnboard, suggestDetNlContracts, buildFallbackPayload, detectFramework, } from "./onboard";
37
+ export type { OnboardOptions, OnboardResult, TsOnboardFramework } from "./onboard";
38
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAQH,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAElF,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,cAAc,EAAE,UAAU,EAAE,CAAC;AAEnE,MAAM,WAAW,WAAW;IAC1B,wFAAwF;IACxF,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,6DAA6D;IAC7D,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB;AAYD;;;;;;;;GAQG;AACH,wBAAsB,IAAI,CACxB,QAAQ,EAAE,MAAM,EAAE,EAClB,OAAO,GAAE,WAAgB,GACxB,OAAO,CAAC,UAAU,CAAC,CA8DrB;AAED;;;GAGG;AACH,OAAO,EACL,UAAU,EACV,qBAAqB,EACrB,oBAAoB,EACpB,eAAe,GAChB,MAAM,WAAW,CAAC;AACnB,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC"}
@@ -0,0 +1,146 @@
1
+ "use strict";
2
+ /**
3
+ * Public API for ``@sponsio/sdk``.
4
+ *
5
+ * Usage:
6
+ *
7
+ * import { scan } from "@sponsio/sdk";
8
+ * const result = await scan(["src/**\/*.ts"]);
9
+ * console.log(JSON.stringify(result, null, 2));
10
+ *
11
+ * The emitted ``{ tools: [...] }`` object is directly consumable by
12
+ * ``sponsio scan <file.json>`` — see the Python-side loader at
13
+ * ``sponsio/discovery/extractors/tool_inventory.py``.
14
+ */
15
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
16
+ if (k2 === undefined) k2 = k;
17
+ var desc = Object.getOwnPropertyDescriptor(m, k);
18
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
19
+ desc = { enumerable: true, get: function() { return m[k]; } };
20
+ }
21
+ Object.defineProperty(o, k2, desc);
22
+ }) : (function(o, m, k, k2) {
23
+ if (k2 === undefined) k2 = k;
24
+ o[k2] = m[k];
25
+ }));
26
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
27
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
28
+ }) : function(o, v) {
29
+ o["default"] = v;
30
+ });
31
+ var __importStar = (this && this.__importStar) || (function () {
32
+ var ownKeys = function(o) {
33
+ ownKeys = Object.getOwnPropertyNames || function (o) {
34
+ var ar = [];
35
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
36
+ return ar;
37
+ };
38
+ return ownKeys(o);
39
+ };
40
+ return function (mod) {
41
+ if (mod && mod.__esModule) return mod;
42
+ var result = {};
43
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
44
+ __setModuleDefault(result, mod);
45
+ return result;
46
+ };
47
+ })();
48
+ var __importDefault = (this && this.__importDefault) || function (mod) {
49
+ return (mod && mod.__esModule) ? mod : { "default": mod };
50
+ };
51
+ Object.defineProperty(exports, "__esModule", { value: true });
52
+ exports.detectFramework = exports.buildFallbackPayload = exports.suggestDetNlContracts = exports.runOnboard = void 0;
53
+ exports.scan = scan;
54
+ const fast_glob_1 = __importDefault(require("fast-glob"));
55
+ const path = __importStar(require("path"));
56
+ const ts_morph_1 = require("ts-morph");
57
+ const generic_1 = require("./extractors/generic");
58
+ const langchain_1 = require("./extractors/langchain");
59
+ const vercel_1 = require("./extractors/vercel");
60
+ const DEFAULT_IGNORE = [
61
+ "**/node_modules/**",
62
+ "**/dist/**",
63
+ "**/build/**",
64
+ "**/.next/**",
65
+ "**/*.d.ts",
66
+ "**/*.test.ts",
67
+ "**/*.spec.ts",
68
+ ];
69
+ /**
70
+ * Scan one or more file globs for agent tool definitions.
71
+ *
72
+ * Only static AST inspection — we never execute user code, so
73
+ * dynamically-constructed tools (computed names, schemas built at
74
+ * runtime) won't be picked up. For those, emit the tool inventory
75
+ * by running the Node process directly and calling ``JSON.stringify``
76
+ * on your tools array.
77
+ */
78
+ async function scan(patterns, options = {}) {
79
+ const cwd = options.cwd ?? process.cwd();
80
+ const files = await (0, fast_glob_1.default)(patterns, {
81
+ cwd,
82
+ absolute: true,
83
+ ignore: [...DEFAULT_IGNORE, ...(options.ignore ?? [])],
84
+ onlyFiles: true,
85
+ });
86
+ const project = new ts_morph_1.Project({
87
+ // Skip loading tsconfig.json — we only need to parse, not type-check.
88
+ skipAddingFilesFromTsConfig: true,
89
+ skipFileDependencyResolution: true,
90
+ compilerOptions: {
91
+ allowJs: true,
92
+ noEmit: true,
93
+ target: 99, // ESNext
94
+ module: 99, // ESNext
95
+ },
96
+ });
97
+ const tools = [];
98
+ const provenance = {};
99
+ const diagnostics = [];
100
+ for (const file of files) {
101
+ let source;
102
+ try {
103
+ source = project.addSourceFileAtPath(file);
104
+ }
105
+ catch (err) {
106
+ diagnostics.push({
107
+ filepath: file,
108
+ line: 0,
109
+ level: "warn",
110
+ message: `failed to parse: ${err.message}`,
111
+ });
112
+ continue;
113
+ }
114
+ // Order matters: framework-specific extractors run first so the
115
+ // dedupe layer below keeps their richer ``provenance.extractor``
116
+ // label (``"vercel_ai"`` / ``"langchain_js"``) instead of the
117
+ // generic fallback.
118
+ const hits = [
119
+ ...(0, vercel_1.extractVercelTools)(source),
120
+ ...(0, langchain_1.extractLangChainTools)(source),
121
+ ...(0, generic_1.extractGenericTools)(source),
122
+ ];
123
+ for (const { tool, provenance: prov } of hits) {
124
+ // Dedup: multiple extractors may match the same call site (e.g.
125
+ // Vercel's ``tool({...})`` looks like LangGraph's
126
+ // ``tool(fn, cfg)`` for a moment). First-writer wins, keyed on
127
+ // (name, filepath, line).
128
+ const key = `${tool.function.name}@${path.relative(cwd, prov.filepath)}:${prov.line}`;
129
+ if (provenance[key])
130
+ continue;
131
+ tools.push(tool);
132
+ provenance[key] = prov;
133
+ }
134
+ }
135
+ return { tools, provenance, diagnostics };
136
+ }
137
+ /**
138
+ * Re-exported after ``scan`` is defined to avoid a circular
139
+ * `index → onboard → index` import while ``scan`` is still in TDZ.
140
+ */
141
+ var onboard_1 = require("./onboard");
142
+ Object.defineProperty(exports, "runOnboard", { enumerable: true, get: function () { return onboard_1.runOnboard; } });
143
+ Object.defineProperty(exports, "suggestDetNlContracts", { enumerable: true, get: function () { return onboard_1.suggestDetNlContracts; } });
144
+ Object.defineProperty(exports, "buildFallbackPayload", { enumerable: true, get: function () { return onboard_1.buildFallbackPayload; } });
145
+ Object.defineProperty(exports, "detectFramework", { enumerable: true, get: function () { return onboard_1.detectFramework; } });
146
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function runInitCli(argv: string[]): Promise<void>;
2
+ //# sourceMappingURL=init.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/cli/init.ts"],"names":[],"mappings":"AAuHA,wBAAsB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA+C9D"}
@@ -0,0 +1,177 @@
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.runInitCli = runInitCli;
37
+ /**
38
+ * ``sponsio init`` — generate a starter ``sponsio.yaml`` skeleton.
39
+ *
40
+ * Mirrors the Python ``sponsio init`` command's non-interactive flag
41
+ * surface: ``--mode``, ``--provider``, ``--judge-fallback``,
42
+ * ``--no-sample``, ``--force``. The TS implementation is non-
43
+ * interactive only — flags are required, no prompts. Use ``onboard``
44
+ * if you want framework detection + tool scanning.
45
+ *
46
+ * Output is a minimal yaml the TS SDK can load: ``runtime.mode`` plus
47
+ * an ``agents.<id>`` block with a sample contract (unless --no-sample).
48
+ */
49
+ const node_fs_1 = require("node:fs");
50
+ const node_path_1 = require("node:path");
51
+ const yaml = __importStar(require("js-yaml"));
52
+ const HELP = "sponsio init — generate a starter sponsio.yaml skeleton\n" +
53
+ "\n" +
54
+ "USAGE:\n" +
55
+ " sponsio init [target] [options] # target = directory or yaml path\n" +
56
+ "\n" +
57
+ "OPTIONS:\n" +
58
+ " -a, --agent <id> Agent identifier (default: agent)\n" +
59
+ " --mode <observe|enforce> Runtime mode (default: observe)\n" +
60
+ " --provider <name> LLM provider hint for downstream\n" +
61
+ " `scan --llm` (openai|anthropic|gemini|none)\n" +
62
+ " --judge-fallback <a|d|s> allow|deny|skip on judge failure\n" +
63
+ " --no-sample Don't include a starter contract\n" +
64
+ " --force Overwrite existing sponsio.yaml\n" +
65
+ " -h, --help Show this help\n" +
66
+ "\n" +
67
+ "EXAMPLES:\n" +
68
+ " sponsio init\n" +
69
+ " sponsio init --mode enforce --no-sample\n" +
70
+ " sponsio init src/ --provider gemini --judge-fallback allow --force\n";
71
+ function parseArgs(argv) {
72
+ const opts = {
73
+ target: ".",
74
+ agent: "agent",
75
+ mode: "observe",
76
+ provider: "none",
77
+ judgeFallback: "allow",
78
+ noSample: false,
79
+ force: false,
80
+ };
81
+ let positional = false;
82
+ for (let i = 0; i < argv.length; i++) {
83
+ const a = argv[i];
84
+ if (a === "-h" || a === "--help") {
85
+ process.stdout.write(HELP);
86
+ process.exit(0);
87
+ }
88
+ if (a === "-a" || a === "--agent") {
89
+ opts.agent = argv[++i];
90
+ continue;
91
+ }
92
+ if (a === "--mode") {
93
+ const v = argv[++i];
94
+ if (v !== "observe" && v !== "enforce") {
95
+ process.stderr.write(`--mode must be observe|enforce (got ${v})\n`);
96
+ process.exit(2);
97
+ }
98
+ opts.mode = v;
99
+ continue;
100
+ }
101
+ if (a === "--provider") {
102
+ const v = argv[++i];
103
+ if (!["openai", "anthropic", "gemini", "none"].includes(v)) {
104
+ process.stderr.write(`--provider must be openai|anthropic|gemini|none (got ${v})\n`);
105
+ process.exit(2);
106
+ }
107
+ opts.provider = v;
108
+ continue;
109
+ }
110
+ if (a === "--judge-fallback") {
111
+ const v = argv[++i];
112
+ if (!["allow", "deny", "skip"].includes(v)) {
113
+ process.stderr.write(`--judge-fallback must be allow|deny|skip (got ${v})\n`);
114
+ process.exit(2);
115
+ }
116
+ opts.judgeFallback = v;
117
+ continue;
118
+ }
119
+ if (a === "--no-sample") {
120
+ opts.noSample = true;
121
+ continue;
122
+ }
123
+ if (a === "--force") {
124
+ opts.force = true;
125
+ continue;
126
+ }
127
+ if (!positional && !a.startsWith("-")) {
128
+ opts.target = a;
129
+ positional = true;
130
+ continue;
131
+ }
132
+ process.stderr.write(`unknown argument: ${a}\n${HELP}`);
133
+ process.exit(2);
134
+ }
135
+ return opts;
136
+ }
137
+ function resolveOutPath(target) {
138
+ const abs = (0, node_path_1.resolve)(target);
139
+ return abs.endsWith(".yaml") || abs.endsWith(".yml") ? abs : (0, node_path_1.resolve)(abs, "sponsio.yaml");
140
+ }
141
+ async function runInitCli(argv) {
142
+ const opts = parseArgs(argv);
143
+ const outPath = resolveOutPath(opts.target);
144
+ if ((0, node_fs_1.existsSync)(outPath) && !opts.force) {
145
+ process.stderr.write(`✗ ${outPath} already exists. Pass --force to overwrite, or delete the file.\n`);
146
+ process.exit(1);
147
+ }
148
+ if (opts.force && (0, node_fs_1.existsSync)(outPath)) {
149
+ (0, node_fs_1.unlinkSync)(outPath);
150
+ }
151
+ const contracts = opts.noSample
152
+ ? []
153
+ : [{ E: "tool `check_policy` must precede `issue_refund`" }];
154
+ const payload = {
155
+ version: 1,
156
+ runtime: { mode: opts.mode },
157
+ judge: { fallback_mode: opts.judgeFallback, circuit_breaker: true },
158
+ agents: {
159
+ [opts.agent]: { contracts },
160
+ },
161
+ };
162
+ if (opts.provider !== "none") {
163
+ payload.extractor = { provider: opts.provider };
164
+ }
165
+ const header = "# Generated by: sponsio init\n" +
166
+ "# Starter sponsio.yaml — edit contracts: to add deterministic rules.\n" +
167
+ "# See `sponsio patterns` for the supported NL pattern catalog.\n\n";
168
+ (0, node_fs_1.writeFileSync)(outPath, header + yaml.dump(payload, { lineWidth: 100 }), "utf-8");
169
+ process.stdout.write(`✓ wrote ${outPath} (mode: ${opts.mode}, agent: ${opts.agent})\n`);
170
+ if (contracts.length === 0) {
171
+ process.stdout.write(` tip: add at least one contract under agents.${opts.agent}.contracts:\n` +
172
+ ` - E: "tool \`<gate>\` must precede \`<action>\`"\n`);
173
+ }
174
+ process.stdout.write(`\nNext: run \`sponsio scan <src>\` to mine contracts from your code, or\n` +
175
+ ` edit the file by hand and validate with \`sponsio validate\`.\n`);
176
+ }
177
+ //# sourceMappingURL=init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/cli/init.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function runModeCli(argv: string[]): Promise<void>;
2
+ //# sourceMappingURL=mode.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mode.d.ts","sourceRoot":"","sources":["../../src/cli/mode.ts"],"names":[],"mappings":"AA0BA,wBAAsB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAiD9D"}
@@ -0,0 +1,71 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.runModeCli = runModeCli;
4
+ /**
5
+ * ``sponsio mode`` — flip a sponsio.yaml between observe and enforce.
6
+ *
7
+ * Mirrors the Python ``sponsio mode`` command: a single in-place edit
8
+ * of the ``mode:`` line, with surrounding comments preserved. Works
9
+ * for both the TS-onboard layout (``runtime: { mode: ... }``) and
10
+ * the Python-onboard layout (``defaults: { mode: ... }``) — the
11
+ * regex matches any ``mode:`` line at any indentation.
12
+ */
13
+ const node_fs_1 = require("node:fs");
14
+ const node_path_1 = require("node:path");
15
+ const HELP = "sponsio mode — flip sponsio.yaml between observe and enforce\n" +
16
+ "\n" +
17
+ "USAGE:\n" +
18
+ " sponsio mode <observe|enforce> [options]\n" +
19
+ "\n" +
20
+ "OPTIONS:\n" +
21
+ " -c, --config <file> Path to sponsio.yaml (default: sponsio.yaml)\n" +
22
+ " -h, --help Show this help\n" +
23
+ "\n" +
24
+ "EXAMPLES:\n" +
25
+ " sponsio mode enforce\n" +
26
+ " sponsio mode observe -c contracts/sponsio.yaml\n";
27
+ async function runModeCli(argv) {
28
+ let target = null;
29
+ let configPath = "sponsio.yaml";
30
+ for (let i = 0; i < argv.length; i++) {
31
+ const a = argv[i];
32
+ if (a === "-h" || a === "--help") {
33
+ process.stdout.write(HELP);
34
+ return;
35
+ }
36
+ if (a === "-c" || a === "--config") {
37
+ configPath = argv[++i];
38
+ continue;
39
+ }
40
+ if (a === "observe" || a === "enforce") {
41
+ target = a;
42
+ continue;
43
+ }
44
+ process.stderr.write(`unknown argument: ${a}\n${HELP}`);
45
+ process.exit(2);
46
+ }
47
+ if (!target) {
48
+ process.stderr.write(`missing target mode (observe|enforce)\n\n${HELP}`);
49
+ process.exit(2);
50
+ }
51
+ const path = (0, node_path_1.resolve)(configPath);
52
+ if (!(0, node_fs_1.existsSync)(path)) {
53
+ process.stderr.write(`✗ ${path} not found — run 'sponsio onboard .' first\n`);
54
+ process.exit(1);
55
+ }
56
+ const text = (0, node_fs_1.readFileSync)(path, "utf8");
57
+ const re = /^(\s*mode:\s*)(observe|enforce)(\s*(?:#.*)?)$/m;
58
+ const match = text.match(re);
59
+ if (!match) {
60
+ process.stderr.write(`✗ no \`mode:\` line found in ${path} — edit by hand or re-run \`sponsio onboard --force\`\n`);
61
+ process.exit(1);
62
+ }
63
+ if (match[2] === target) {
64
+ process.stdout.write(`✓ ${path} is already \`mode: ${target}\` (no change)\n`);
65
+ return;
66
+ }
67
+ const newText = text.replace(re, (_full, p1, _p2, p3) => `${p1}${target}${p3}`);
68
+ (0, node_fs_1.writeFileSync)(path, newText, "utf8");
69
+ process.stdout.write(`✓ ${path} → mode: ${target}\n`);
70
+ }
71
+ //# sourceMappingURL=mode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mode.js","sourceRoot":"","sources":["../../src/cli/mode.ts"],"names":[],"mappings":";;AA0BA,gCAiDC;AA3ED;;;;;;;;GAQG;AACH,qCAAkE;AAClE,yCAAoC;AAEpC,MAAM,IAAI,GACR,gEAAgE;IAChE,IAAI;IACJ,UAAU;IACV,8CAA8C;IAC9C,IAAI;IACJ,YAAY;IACZ,uEAAuE;IACvE,yCAAyC;IACzC,IAAI;IACJ,aAAa;IACb,0BAA0B;IAC1B,oDAAoD,CAAC;AAEhD,KAAK,UAAU,UAAU,CAAC,IAAc;IAC7C,IAAI,MAAM,GAAiC,IAAI,CAAC;IAChD,IAAI,UAAU,GAAG,cAAc,CAAC;IAEhC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,QAAQ,EAAE,CAAC;YACjC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC3B,OAAO;QACT,CAAC;QACD,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,UAAU,EAAE,CAAC;YACnC,UAAU,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;YACvB,SAAS;QACX,CAAC;QACD,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,SAAS,EAAE,CAAC;YACvC,MAAM,GAAG,CAAC,CAAC;YACX,SAAS;QACX,CAAC;QACD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,qBAAqB,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;QACxD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,4CAA4C,IAAI,EAAE,CAAC,CAAC;QACzE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,IAAI,GAAG,IAAA,mBAAO,EAAC,UAAU,CAAC,CAAC;IACjC,IAAI,CAAC,IAAA,oBAAU,EAAC,IAAI,CAAC,EAAE,CAAC;QACtB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,IAAI,8CAA8C,CAAC,CAAC;QAC9E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,IAAI,GAAG,IAAA,sBAAY,EAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACxC,MAAM,EAAE,GAAG,gDAAgD,CAAC;IAC5D,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAC7B,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,gCAAgC,IAAI,yDAAyD,CAC9F,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,MAAM,EAAE,CAAC;QACxB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,IAAI,uBAAuB,MAAM,kBAAkB,CAAC,CAAC;QAC/E,OAAO;IACT,CAAC;IACD,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC,KAAK,EAAE,EAAU,EAAE,GAAW,EAAE,EAAU,EAAE,EAAE,CAAC,GAAG,EAAE,GAAG,MAAM,GAAG,EAAE,EAAE,CAAC,CAAC;IACxG,IAAA,uBAAa,EAAC,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;IACrC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,IAAI,YAAY,MAAM,IAAI,CAAC,CAAC;AACxD,CAAC"}