@sponsio/sdk 0.1.0 → 0.2.0-alpha.10

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 (123) hide show
  1. package/contracts/benchmark/agentdojo.yaml +551 -0
  2. package/contracts/benchmark/odcv_bench.yaml +393 -0
  3. package/contracts/benchmark/redcode_exec.yaml +488 -0
  4. package/contracts/benchmark/swebench.yaml +176 -0
  5. package/contracts/benchmark/tau2_bench.yaml +984 -0
  6. package/contracts/capability/destructive.yaml +213 -0
  7. package/contracts/capability/factual-claims.yaml +79 -0
  8. package/contracts/capability/host-config-integrity.yaml +42 -9
  9. package/contracts/capability/self-modify.yaml +58 -12
  10. package/contracts/capability/shell.yaml +19 -10
  11. package/contracts/incident/claude-code-secret-bypass.yaml +48 -16
  12. package/contracts/incident/cursor-railway-wipe.yaml +60 -4
  13. package/contracts/incident/openclaw.yaml +9 -62
  14. package/contracts/premium/.gitkeep +5 -6
  15. package/dist/cli/cli.js +32 -0
  16. package/dist/cli/cli.js.map +1 -1
  17. package/dist/cli/packs.d.ts.map +1 -1
  18. package/dist/cli/packs.js +14 -8
  19. package/dist/cli/packs.js.map +1 -1
  20. package/dist/cli/patterns.d.ts +5 -4
  21. package/dist/cli/patterns.d.ts.map +1 -1
  22. package/dist/cli/patterns.js +11 -10
  23. package/dist/cli/patterns.js.map +1 -1
  24. package/dist/cli/prompt.js +5 -5
  25. package/dist/cli/prompt.js.map +1 -1
  26. package/dist/cli/scan.js +2 -2
  27. package/dist/cli/skill.d.ts +1 -1
  28. package/dist/cli/skill.js +1 -1
  29. package/dist/cli/validate.js +5 -5
  30. package/dist/cli/validate.js.map +1 -1
  31. package/dist/cloud/client.d.ts +76 -0
  32. package/dist/cloud/client.d.ts.map +1 -0
  33. package/dist/cloud/client.js +204 -0
  34. package/dist/cloud/client.js.map +1 -0
  35. package/dist/cloud/evidence.d.ts +108 -0
  36. package/dist/cloud/evidence.d.ts.map +1 -0
  37. package/dist/cloud/evidence.js +184 -0
  38. package/dist/cloud/evidence.js.map +1 -0
  39. package/dist/cloud/privacy.d.ts +67 -0
  40. package/dist/cloud/privacy.d.ts.map +1 -0
  41. package/dist/cloud/privacy.js +170 -0
  42. package/dist/cloud/privacy.js.map +1 -0
  43. package/dist/cloud/view-model.d.ts +49 -0
  44. package/dist/cloud/view-model.d.ts.map +1 -0
  45. package/dist/cloud/view-model.js +172 -0
  46. package/dist/cloud/view-model.js.map +1 -0
  47. package/dist/core/config-loader.d.ts.map +1 -1
  48. package/dist/core/config-loader.js +81 -9
  49. package/dist/core/config-loader.js.map +1 -1
  50. package/dist/core/evaluator.d.ts +11 -1
  51. package/dist/core/evaluator.d.ts.map +1 -1
  52. package/dist/core/evaluator.js +275 -13
  53. package/dist/core/evaluator.js.map +1 -1
  54. package/dist/core/formula.d.ts +76 -17
  55. package/dist/core/formula.d.ts.map +1 -1
  56. package/dist/core/formula.js +95 -1
  57. package/dist/core/formula.js.map +1 -1
  58. package/dist/core/grounding.d.ts +44 -8
  59. package/dist/core/grounding.d.ts.map +1 -1
  60. package/dist/core/grounding.js +208 -26
  61. package/dist/core/grounding.js.map +1 -1
  62. package/dist/core/nl-parser.d.ts +2 -2
  63. package/dist/core/nl-parser.d.ts.map +1 -1
  64. package/dist/core/nl-parser.js +617 -41
  65. package/dist/core/nl-parser.js.map +1 -1
  66. package/dist/core/pack-loader.d.ts.map +1 -1
  67. package/dist/core/pack-loader.js +14 -2
  68. package/dist/core/pack-loader.js.map +1 -1
  69. package/dist/core/parser.d.ts.map +1 -1
  70. package/dist/core/parser.js +30 -1
  71. package/dist/core/parser.js.map +1 -1
  72. package/dist/core/pattern-factory.d.ts.map +1 -1
  73. package/dist/core/pattern-factory.js +14 -1
  74. package/dist/core/pattern-factory.js.map +1 -1
  75. package/dist/core/patterns.d.ts +118 -1
  76. package/dist/core/patterns.d.ts.map +1 -1
  77. package/dist/core/patterns.js +189 -10
  78. package/dist/core/patterns.js.map +1 -1
  79. package/dist/core/session-log.d.ts.map +1 -1
  80. package/dist/core/session-log.js +20 -1
  81. package/dist/core/session-log.js.map +1 -1
  82. package/dist/core/sto.d.ts +21 -27
  83. package/dist/core/sto.d.ts.map +1 -1
  84. package/dist/core/sto.js +30 -33
  85. package/dist/core/sto.js.map +1 -1
  86. package/dist/core/tool-names.d.ts +59 -0
  87. package/dist/core/tool-names.d.ts.map +1 -0
  88. package/dist/core/tool-names.js +128 -0
  89. package/dist/core/tool-names.js.map +1 -0
  90. package/dist/index.d.ts +181 -32
  91. package/dist/index.d.ts.map +1 -1
  92. package/dist/index.js +415 -67
  93. package/dist/index.js.map +1 -1
  94. package/dist/integrations/claude-agent.d.ts +5 -0
  95. package/dist/integrations/claude-agent.d.ts.map +1 -1
  96. package/dist/integrations/claude-agent.js +42 -13
  97. package/dist/integrations/claude-agent.js.map +1 -1
  98. package/dist/integrations/google-adk.d.ts +5 -3
  99. package/dist/integrations/google-adk.d.ts.map +1 -1
  100. package/dist/integrations/google-adk.js +9 -5
  101. package/dist/integrations/google-adk.js.map +1 -1
  102. package/dist/integrations/langchain.d.ts +7 -0
  103. package/dist/integrations/langchain.d.ts.map +1 -1
  104. package/dist/integrations/langchain.js +21 -3
  105. package/dist/integrations/langchain.js.map +1 -1
  106. package/dist/integrations/openai-agents.d.ts +22 -10
  107. package/dist/integrations/openai-agents.d.ts.map +1 -1
  108. package/dist/integrations/openai-agents.js +55 -15
  109. package/dist/integrations/openai-agents.js.map +1 -1
  110. package/dist/integrations/openai.d.ts +11 -0
  111. package/dist/integrations/openai.d.ts.map +1 -1
  112. package/dist/integrations/openai.js +130 -48
  113. package/dist/integrations/openai.js.map +1 -1
  114. package/dist/integrations/vercel-ai.d.ts +20 -9
  115. package/dist/integrations/vercel-ai.d.ts.map +1 -1
  116. package/dist/integrations/vercel-ai.js +131 -32
  117. package/dist/integrations/vercel-ai.js.map +1 -1
  118. package/package.json +17 -9
  119. package/prompts/onboard.md +26 -17
  120. package/prompts/scan.md +3 -5
  121. package/skills/SKILL.md +13 -83
  122. package/contracts/core/llm_safety.yaml +0 -140
  123. package/prompts/refresh.md +0 -118
@@ -3,24 +3,24 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.runPromptCli = runPromptCli;
4
4
  /**
5
5
  * ``sponsio prompt`` — print the agent-facing prompt template for a
6
- * sponsio workflow (onboard / scan / refresh).
6
+ * sponsio workflow (onboard / scan).
7
7
  *
8
- * Mirrors the Python ``sponsio prompt`` command. The same three .md
9
- * files live in ``ts/packages/sdk/prompts/`` (mirrored from
8
+ * Mirrors the Python ``sponsio prompt`` command. The same .md files
9
+ * live in ``ts/packages/sdk/prompts/`` (mirrored from
10
10
  * ``sponsio/prompts/``); this command just reads and prints the right
11
11
  * one. Used by the Sponsio skill to drive contract authoring without
12
12
  * a separate LLM API call.
13
13
  */
14
14
  const node_fs_1 = require("node:fs");
15
15
  const node_path_1 = require("node:path");
16
- const FLOWS = new Set(["onboard", "scan", "refresh"]);
16
+ const FLOWS = new Set(["onboard", "scan"]);
17
17
  const HELP = "sponsio prompt — print the contract-authoring prompt for a workflow\n" +
18
18
  "\n" +
19
19
  "USAGE:\n" +
20
20
  " sponsio prompt <flow>\n" +
21
21
  "\n" +
22
22
  "ARGUMENTS:\n" +
23
- " <flow> onboard | scan | refresh\n" +
23
+ " <flow> onboard | scan\n" +
24
24
  "\n" +
25
25
  "EXAMPLES:\n" +
26
26
  " sponsio prompt onboard\n" +
@@ -1 +1 @@
1
- {"version":3,"file":"prompt.js","sourceRoot":"","sources":["../../src/cli/prompt.ts"],"names":[],"mappings":";;AAsCA,oCAcC;AApDD;;;;;;;;;GASG;AACH,qCAAmD;AACnD,yCAAiC;AAEjC,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC;AAEtD,MAAM,IAAI,GACR,uEAAuE;IACvE,IAAI;IACJ,UAAU;IACV,2BAA2B;IAC3B,IAAI;IACJ,cAAc;IACd,0CAA0C;IAC1C,IAAI;IACJ,aAAa;IACb,4BAA4B;IAC5B,kCAAkC,CAAC;AAErC,SAAS,gBAAgB;IACvB,6EAA6E;IAC7E,2CAA2C;IAC3C,MAAM,UAAU,GAAG,CAAC,IAAA,gBAAI,EAAC,SAAS,EAAE,IAAI,EAAE,SAAS,CAAC,EAAE,IAAA,gBAAI,EAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC;IAC9F,KAAK,MAAM,CAAC,IAAI,UAAU,EAAE,CAAC;QAC3B,IAAI,IAAA,oBAAU,EAAC,IAAA,gBAAI,EAAC,CAAC,EAAE,YAAY,CAAC,CAAC;YAAE,OAAO,CAAC,CAAC;IAClD,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,yDAAyD,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACrG,CAAC;AAEM,KAAK,UAAU,YAAY,CAAC,IAAc;IAC/C,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE,CAAC;QAClE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC3B,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACvC,OAAO;IACT,CAAC;IACD,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IACrB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;QACrB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,iBAAiB,IAAI,KAAK,IAAI,EAAE,CAAC,CAAC;QACvD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,MAAM,UAAU,GAAG,gBAAgB,EAAE,CAAC;IACtC,MAAM,IAAI,GAAG,IAAA,sBAAY,EAAC,IAAA,gBAAI,EAAC,UAAU,EAAE,GAAG,IAAI,KAAK,CAAC,EAAE,OAAO,CAAC,CAAC;IACnE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AAC7B,CAAC"}
1
+ {"version":3,"file":"prompt.js","sourceRoot":"","sources":["../../src/cli/prompt.ts"],"names":[],"mappings":";;AAsCA,oCAcC;AApDD;;;;;;;;;GASG;AACH,qCAAmD;AACnD,yCAAiC;AAEjC,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC;AAE3C,MAAM,IAAI,GACR,uEAAuE;IACvE,IAAI;IACJ,UAAU;IACV,2BAA2B;IAC3B,IAAI;IACJ,cAAc;IACd,gCAAgC;IAChC,IAAI;IACJ,aAAa;IACb,4BAA4B;IAC5B,kCAAkC,CAAC;AAErC,SAAS,gBAAgB;IACvB,6EAA6E;IAC7E,2CAA2C;IAC3C,MAAM,UAAU,GAAG,CAAC,IAAA,gBAAI,EAAC,SAAS,EAAE,IAAI,EAAE,SAAS,CAAC,EAAE,IAAA,gBAAI,EAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC;IAC9F,KAAK,MAAM,CAAC,IAAI,UAAU,EAAE,CAAC;QAC3B,IAAI,IAAA,oBAAU,EAAC,IAAA,gBAAI,EAAC,CAAC,EAAE,YAAY,CAAC,CAAC;YAAE,OAAO,CAAC,CAAC;IAClD,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,yDAAyD,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACrG,CAAC;AAEM,KAAK,UAAU,YAAY,CAAC,IAAc;IAC/C,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE,CAAC;QAClE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC3B,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACvC,OAAO;IACT,CAAC;IACD,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IACrB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;QACrB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,iBAAiB,IAAI,KAAK,IAAI,EAAE,CAAC,CAAC;QACvD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,MAAM,UAAU,GAAG,gBAAgB,EAAE,CAAC;IACtC,MAAM,IAAI,GAAG,IAAA,sBAAY,EAAC,IAAA,gBAAI,EAAC,UAAU,EAAE,GAAG,IAAI,KAAK,CAAC,EAAE,OAAO,CAAC,CAAC;IACnE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AAC7B,CAAC"}
package/dist/cli/scan.js CHANGED
@@ -40,8 +40,8 @@ exports.runScanCli = runScanCli;
40
40
  * Mirrors the Python ``sponsio scan`` library-maintenance flow: AST
41
41
  * scan a path, infer deterministic contracts heuristically, write a
42
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
- * refresh the contract list.
43
+ * has set up the project, when you've added new tools and want to
44
+ * update the contract list.
45
45
  *
46
46
  * Differs from the default ``npx sponsio <patterns>`` mode (which
47
47
  * emits a tools.json inventory) and from ``onboard`` (first-time
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * ``sponsio skill install`` — drop the universal SKILL.md
3
3
  * into Cursor / Claude Code / Codex skill directories so your
4
- * coding agent knows how to ``onboard`` / ``scan`` / ``refresh`` /
4
+ * coding agent knows how to ``onboard`` / ``scan`` /
5
5
  * flip-to-enforce on every future project without re-pasting the
6
6
  * one-prompt setup.
7
7
  *
package/dist/cli/skill.js CHANGED
@@ -2,7 +2,7 @@
2
2
  /**
3
3
  * ``sponsio skill install`` — drop the universal SKILL.md
4
4
  * into Cursor / Claude Code / Codex skill directories so your
5
- * coding agent knows how to ``onboard`` / ``scan`` / ``refresh`` /
5
+ * coding agent knows how to ``onboard`` / ``scan`` /
6
6
  * flip-to-enforce on every future project without re-pasting the
7
7
  * one-prompt setup.
8
8
  *
@@ -157,9 +157,9 @@ async function runValidateCli(argv) {
157
157
  }
158
158
  const hasWarnings = result.skipped.length > 0 ||
159
159
  result.unparseableNl.length > 0 ||
160
- // Sto contracts in OSS are Cloud-only — `pip install sponsio[cloud]`
161
- // activates the judge pipeline. Without Cloud, OSS rejects them at
162
- // load time. Surface as a strict-mode warning so CI catches it.
160
+ // Sto contracts are not supported in this build (the engine is
161
+ // deterministic-only). They are rejected at load time. Surface as
162
+ // a strict-mode warning so CI catches it.
163
163
  result.stoContracts > 0;
164
164
  if (args.strict && hasWarnings)
165
165
  process.exit(2);
@@ -170,8 +170,8 @@ function renderText(r) {
170
170
  lines.push(` agent: ${r.agent}`);
171
171
  lines.push(` runtime.mode: ${r.mode ?? "(unset — falls to observe)"}`);
172
172
  lines.push(` det contracts: ${r.detContracts}`);
173
- lines.push(` sto contracts: ${r.stoContracts}${r.stoContracts > 0 ? " (!! Sponsio Cloud only — `pip install sponsio[cloud]`)" : ""}`);
174
- lines.push(` judge configured: ${r.judgeConfigured ? "yes (Cloud only)" : "no"}`);
173
+ lines.push(` sto contracts: ${r.stoContracts}${r.stoContracts > 0 ? " (not supported in this build)" : ""}`);
174
+ lines.push(` judge configured: ${r.judgeConfigured ? "yes (not supported in this build)" : "no"}`);
175
175
  if (r.unparseableNl.length) {
176
176
  lines.push("");
177
177
  lines.push(`! ${r.unparseableNl.length} contract(s) failed NL parsing:`);
@@ -1 +1 @@
1
- {"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/cli/validate.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/cli/validate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,76 @@
1
+ /**
2
+ * Talking to the cloud.
3
+ *
4
+ * Port of ``sponsio/cloud/client.py`` narrowed to the two calls an agent
5
+ * makes at runtime: pull the book it should enforce, and upload what it
6
+ * did. Everything else in the Python client belongs to the CLI.
7
+ *
8
+ * Until this existed the TypeScript SDK enforced correctly and uploaded
9
+ * nothing, so a customer running a TypeScript agent showed up in the
10
+ * console with no runs at all: rules could not be rolled out to them and
11
+ * nothing they did could be seen.
12
+ */
13
+ export declare class CloudError extends Error {
14
+ readonly status?: number;
15
+ constructor(message: string, status?: number);
16
+ }
17
+ /**
18
+ * ``SPONSIO_API_KEY`` first, then ``~/.sponsio/credentials``. The
19
+ * environment wins so CI and one-off runs can override a logged-in
20
+ * machine without touching files.
21
+ */
22
+ export declare function readApiKey(): string | null;
23
+ /**
24
+ * ``SPONSIO_PROJECT``, or null.
25
+ *
26
+ * Which customer a run belongs to is deployment configuration, not code.
27
+ * A platform running one agent for forty customers ships one image and
28
+ * varies the environment; naming the customer in the call would mean an
29
+ * image per customer.
30
+ */
31
+ export declare function readProject(): string | null;
32
+ export declare function baseUrl(): string;
33
+ export interface PulledRulebook {
34
+ yamlText: string;
35
+ versions?: string;
36
+ sha?: string;
37
+ agent?: string;
38
+ channel?: string;
39
+ }
40
+ export interface CloudClientOptions {
41
+ apiKey?: string | null;
42
+ baseUrl?: string;
43
+ /** Milliseconds. A run must not wait on telemetry. */
44
+ timeoutMs?: number;
45
+ }
46
+ export declare class CloudClient {
47
+ readonly apiKey: string | null;
48
+ readonly base: string;
49
+ readonly timeoutMs: number;
50
+ constructor(opts?: CloudClientOptions);
51
+ /** Whether there is a credential to speak with at all. */
52
+ get configured(): boolean;
53
+ private request;
54
+ private static detail;
55
+ /**
56
+ * Fetch a project's rulebook.
57
+ *
58
+ * Without ``agent`` this returns every agent merged into one document:
59
+ * a guard binds by agent id and loads only its own section, so one
60
+ * request serves a whole repo.
61
+ */
62
+ pullRulebook(project?: string | null, opts?: {
63
+ agent?: string;
64
+ version?: number;
65
+ }): Promise<PulledRulebook>;
66
+ /**
67
+ * Send a run to the cloud.
68
+ *
69
+ * Idempotent on the session key server-side, so a retry after a blip
70
+ * cannot double a run. Callers on the hot path must not wait on this:
71
+ * telemetry is outbound-only and best-effort, and losing it must never
72
+ * change what the agent does.
73
+ */
74
+ ingestSession(project: string | null, payload: Record<string, unknown>): Promise<Record<string, unknown>>;
75
+ }
76
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/cloud/client.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAeH,qBAAa,UAAW,SAAQ,KAAK;IACnC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;gBACb,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM;CAK7C;AAED;;;;GAIG;AACH,wBAAgB,UAAU,IAAI,MAAM,GAAG,IAAI,CAkB1C;AAED;;;;;;;GAOG;AACH,wBAAgB,WAAW,IAAI,MAAM,GAAG,IAAI,CAE3C;AAcD,wBAAgB,OAAO,IAAI,MAAM,CAGhC;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,kBAAkB;IACjC,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,sDAAsD;IACtD,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,qBAAa,WAAW;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;gBAEf,IAAI,GAAE,kBAAuB;IAMzC,0DAA0D;IAC1D,IAAI,UAAU,IAAI,OAAO,CAExB;YAEa,OAAO;IA0BrB,OAAO,CAAC,MAAM,CAAC,MAAM;IAerB;;;;;;OAMG;IACG,YAAY,CAChB,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,EACvB,IAAI,GAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAO,GAC9C,OAAO,CAAC,cAAc,CAAC;IAkC1B;;;;;;;OAOG;IACG,aAAa,CACjB,OAAO,EAAE,MAAM,GAAG,IAAI,EACtB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC/B,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAsBpC"}
@@ -0,0 +1,204 @@
1
+ /**
2
+ * Talking to the cloud.
3
+ *
4
+ * Port of ``sponsio/cloud/client.py`` narrowed to the two calls an agent
5
+ * makes at runtime: pull the book it should enforce, and upload what it
6
+ * did. Everything else in the Python client belongs to the CLI.
7
+ *
8
+ * Until this existed the TypeScript SDK enforced correctly and uploaded
9
+ * nothing, so a customer running a TypeScript agent showed up in the
10
+ * console with no runs at all: rules could not be rolled out to them and
11
+ * nothing they did could be seen.
12
+ */
13
+ import { homedir } from "node:os";
14
+ import { join } from "node:path";
15
+ import { readFileSync } from "node:fs";
16
+ const DEFAULT_BASE_URL = "https://app.sponsio.dev";
17
+ /**
18
+ * Resolved per call: a path fixed at import ignores a later change of
19
+ * ``HOME``, which is how a test that moved HOME still read the real key.
20
+ */
21
+ function credentialsPath() {
22
+ return join(homedir(), ".sponsio", "credentials");
23
+ }
24
+ export class CloudError extends Error {
25
+ status;
26
+ constructor(message, status) {
27
+ super(message);
28
+ this.name = "CloudError";
29
+ if (status !== undefined)
30
+ this.status = status;
31
+ }
32
+ }
33
+ /**
34
+ * ``SPONSIO_API_KEY`` first, then ``~/.sponsio/credentials``. The
35
+ * environment wins so CI and one-off runs can override a logged-in
36
+ * machine without touching files.
37
+ */
38
+ export function readApiKey() {
39
+ const env = (process.env.SPONSIO_API_KEY ?? "").trim();
40
+ if (env)
41
+ return env;
42
+ try {
43
+ for (const line of readFileSync(credentialsPath(), "utf8").split("\n")) {
44
+ const t = line.trim();
45
+ if (!t || t.startsWith("#"))
46
+ continue;
47
+ const eq = t.indexOf("=");
48
+ if (eq < 0)
49
+ continue;
50
+ if (t.slice(0, eq).trim() === "api_key") {
51
+ const v = t.slice(eq + 1).trim();
52
+ if (v)
53
+ return v;
54
+ }
55
+ }
56
+ }
57
+ catch {
58
+ return null;
59
+ }
60
+ return null;
61
+ }
62
+ /**
63
+ * ``SPONSIO_PROJECT``, or null.
64
+ *
65
+ * Which customer a run belongs to is deployment configuration, not code.
66
+ * A platform running one agent for forty customers ships one image and
67
+ * varies the environment; naming the customer in the call would mean an
68
+ * image per customer.
69
+ */
70
+ export function readProject() {
71
+ return (process.env.SPONSIO_PROJECT ?? "").trim() || null;
72
+ }
73
+ /**
74
+ * Strip trailing slashes without a regex.
75
+ *
76
+ * ``/\/+$/`` is quadratic on a string that is mostly slashes, and the
77
+ * base URL comes from the environment on a machine we do not run.
78
+ */
79
+ function trimSlashes(url) {
80
+ let end = url.length;
81
+ while (end > 0 && url.charCodeAt(end - 1) === 47)
82
+ end--;
83
+ return url.slice(0, end);
84
+ }
85
+ export function baseUrl() {
86
+ const explicit = (process.env.SPONSIO_API_URL ?? "").trim();
87
+ return trimSlashes(explicit || DEFAULT_BASE_URL);
88
+ }
89
+ export class CloudClient {
90
+ apiKey;
91
+ base;
92
+ timeoutMs;
93
+ constructor(opts = {}) {
94
+ this.apiKey = opts.apiKey === undefined ? readApiKey() : opts.apiKey;
95
+ this.base = trimSlashes(opts.baseUrl ?? baseUrl());
96
+ this.timeoutMs = opts.timeoutMs ?? 10_000;
97
+ }
98
+ /** Whether there is a credential to speak with at all. */
99
+ get configured() {
100
+ return Boolean(this.apiKey);
101
+ }
102
+ async request(method, path, body, contentType) {
103
+ if (!this.apiKey)
104
+ throw new CloudError("no API key configured");
105
+ const controller = new AbortController();
106
+ const timer = setTimeout(() => controller.abort(), this.timeoutMs);
107
+ try {
108
+ const headers = {
109
+ Authorization: `Bearer ${this.apiKey}`,
110
+ };
111
+ if (contentType)
112
+ headers["Content-Type"] = contentType;
113
+ const res = await fetch(this.base + path, {
114
+ method,
115
+ headers,
116
+ ...(body === undefined ? {} : { body }),
117
+ signal: controller.signal,
118
+ });
119
+ return { status: res.status, text: await res.text(), headers: res.headers };
120
+ }
121
+ finally {
122
+ clearTimeout(timer);
123
+ }
124
+ }
125
+ static detail(text, fallback) {
126
+ try {
127
+ const parsed = JSON.parse(text);
128
+ const d = parsed.detail;
129
+ if (typeof d === "string")
130
+ return d;
131
+ if (d && typeof d === "object") {
132
+ const o = d;
133
+ return o.message ?? o.error ?? fallback;
134
+ }
135
+ }
136
+ catch {
137
+ /* not JSON; the fallback says what happened */
138
+ }
139
+ return fallback;
140
+ }
141
+ /**
142
+ * Fetch a project's rulebook.
143
+ *
144
+ * Without ``agent`` this returns every agent merged into one document:
145
+ * a guard binds by agent id and loads only its own section, so one
146
+ * request serves a whole repo.
147
+ */
148
+ async pullRulebook(project, opts = {}) {
149
+ const q = [];
150
+ if (project)
151
+ q.push(`project=${encodeURIComponent(project)}`);
152
+ if (opts.agent)
153
+ q.push(`agent=${encodeURIComponent(opts.agent)}`);
154
+ if (opts.version !== undefined)
155
+ q.push(`version=${opts.version}`);
156
+ const path = "/v1/rulebook" + (q.length ? "?" + q.join("&") : "");
157
+ const { status, text, headers } = await this.request("GET", path);
158
+ if (status === 404) {
159
+ // "Nothing published yet" rather than a failure: the caller may
160
+ // publish its local yaml instead of giving up.
161
+ throw new CloudError(CloudClient.detail(text, "no rulebook published"), 404);
162
+ }
163
+ if (status !== 200) {
164
+ throw new CloudError(CloudClient.detail(text, `pull failed (${status})`), status);
165
+ }
166
+ const out = { yamlText: text };
167
+ const v = headers.get("x-rulebook-versions") ?? headers.get("x-rulebook-version");
168
+ if (v)
169
+ out.versions = v;
170
+ const sha = headers.get("x-rulebook-sha");
171
+ if (sha)
172
+ out.sha = sha;
173
+ const agent = headers.get("x-rulebook-agent");
174
+ if (agent)
175
+ out.agent = agent;
176
+ const channel = headers.get("x-rulebook-channel");
177
+ if (channel)
178
+ out.channel = channel;
179
+ return out;
180
+ }
181
+ /**
182
+ * Send a run to the cloud.
183
+ *
184
+ * Idempotent on the session key server-side, so a retry after a blip
185
+ * cannot double a run. Callers on the hot path must not wait on this:
186
+ * telemetry is outbound-only and best-effort, and losing it must never
187
+ * change what the agent does.
188
+ */
189
+ async ingestSession(project, payload) {
190
+ const path = "/v1/sessions/ingest" +
191
+ (project ? `?project=${encodeURIComponent(project)}` : "");
192
+ const { status, text } = await this.request("POST", path, JSON.stringify(payload), "application/json");
193
+ if (status !== 200) {
194
+ throw new CloudError(CloudClient.detail(text, `ingest failed (${status})`), status);
195
+ }
196
+ try {
197
+ return JSON.parse(text);
198
+ }
199
+ catch {
200
+ throw new CloudError("ingest returned a non-JSON body", status);
201
+ }
202
+ }
203
+ }
204
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/cloud/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,108 @@
1
+ /**
2
+ * The evidence lane, from TypeScript.
3
+ *
4
+ * Rules check what an agent *does*; evidence checks what it *says*. A
5
+ * model that reports "the three line items total $100" is making a claim
6
+ * that is either true of the numbers it was given or is not, and no
7
+ * amount of prompting settles it. This sends the claim to
8
+ * `/v1/evidence/verify`, which resolves it against the declared inputs
9
+ * and answers PASS, MISMATCH, or a verdict meaning it could not tell.
10
+ *
11
+ * Parity with `sponsio/cloud/evidence.py`: same endpoint, same wire
12
+ * shape, same verdict vocabulary. One service, one meter — the server
13
+ * records usage per tenant and cannot see which SDK called it.
14
+ *
15
+ * The judgement is entirely server-side. This file normalises inputs,
16
+ * makes one request, and classifies the answer.
17
+ *
18
+ * @module @sponsio/sdk/cloud/evidence
19
+ */
20
+ /** A verdict the server can return. Anything else is treated as unknown. */
21
+ export type EvidenceVerdict = "PASS" | "MISMATCH" | "NO_EVIDENCE" | "SOURCE_UNAVAILABLE" | "UNDERDETERMINED";
22
+ /** What the server says to do about a verdict. */
23
+ export type EvidenceAction = "release" | "block" | "clarify";
24
+ /**
25
+ * One input, tagged with where its value came from.
26
+ *
27
+ * The tag is not decoration. Each predicate declares which sources it
28
+ * will accept, and the server refuses a value that arrived from anywhere
29
+ * else: a total the model made up must not be checked against itself.
30
+ * `GET /v1/evidence/predicates` lists the allowlist per predicate.
31
+ */
32
+ export interface TaggedInput {
33
+ value: unknown;
34
+ source: string;
35
+ }
36
+ /** Ergonomic forms accepted per input: a tagged object or a `[value, source]` pair. */
37
+ export type InputSpec = TaggedInput | [unknown, string];
38
+ export interface EvidenceResult {
39
+ predicate: string;
40
+ verdict: EvidenceVerdict | string;
41
+ action: EvidenceAction | string;
42
+ /** The resolved values the verdict was reached from. */
43
+ values: unknown[];
44
+ evidenceTs?: number;
45
+ source?: string;
46
+ tableVersion?: string;
47
+ /** The right value, when the server knows it. Never invented. */
48
+ correction?: unknown;
49
+ /** What to ask about, on a clarify action. */
50
+ clarifyOn: unknown[];
51
+ /** Server-side record of this check, for an audit trail. */
52
+ attestationId?: string;
53
+ }
54
+ /** The check did not reach a verdict. The caller decides open or closed. */
55
+ export declare class EvidenceError extends Error {
56
+ readonly status?: number;
57
+ constructor(message: string, status?: number);
58
+ }
59
+ /** True when this verdict must stop the response. */
60
+ export declare function isBlocking(result: EvidenceResult): boolean;
61
+ /** True when this verdict asks the agent to clarify rather than stop. */
62
+ export declare function needsClarification(result: EvidenceResult): boolean;
63
+ /**
64
+ * Ergonomic input forms to the wire's tagged shape.
65
+ *
66
+ * An untagged input is rejected here rather than sent. The server would
67
+ * refuse it anyway under the taint rule, and failing locally names the
68
+ * input that is missing its tag.
69
+ *
70
+ * The pair form needs a string source. Without that check a two-element
71
+ * array of data read as a pair: `{ items: [40, 60] }` became
72
+ * `value: 40, source: "60"`, and the server then refused source `"60"`
73
+ * as untrusted, an error naming nothing the caller had written. A list
74
+ * value takes the explicit form, `[[40, 60], "submitted_output"]`.
75
+ */
76
+ export declare function normalizeInputs(inputs?: Record<string, InputSpec>): Record<string, TaggedInput>;
77
+ export interface EvidenceClientOptions {
78
+ /** Defaults to `SPONSIO_API_KEY`. */
79
+ apiKey?: string;
80
+ /** Defaults to `SPONSIO_API_URL`, then `https://app.sponsio.dev`. */
81
+ url?: string;
82
+ /** Per-request timeout in milliseconds. */
83
+ timeoutMs?: number;
84
+ }
85
+ export declare class EvidenceClient {
86
+ readonly url: string;
87
+ private readonly apiKey;
88
+ private readonly timeoutMs;
89
+ constructor(opts?: EvidenceClientOptions);
90
+ get configured(): boolean;
91
+ private post;
92
+ /**
93
+ * Verify one claim against fresh evidence, server-side.
94
+ *
95
+ * Throws `EvidenceError` when the check did not run to a verdict.
96
+ * Decide open or closed at the call site; closed means treating the
97
+ * throw as a block.
98
+ */
99
+ verify(predicate: string, opts?: {
100
+ value?: unknown;
101
+ text?: string;
102
+ inputs?: Record<string, InputSpec>;
103
+ sessionId?: string;
104
+ }): Promise<EvidenceResult>;
105
+ /** The predicate catalog this key can reach. */
106
+ predicates(): Promise<Record<string, unknown>[]>;
107
+ }
108
+ //# sourceMappingURL=evidence.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evidence.d.ts","sourceRoot":"","sources":["../../src/cloud/evidence.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,4EAA4E;AAC5E,MAAM,MAAM,eAAe,GACvB,MAAM,GACN,UAAU,GACV,aAAa,GACb,oBAAoB,GACpB,iBAAiB,CAAC;AAEtB,kDAAkD;AAClD,MAAM,MAAM,cAAc,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,CAAC;AAE7D;;;;;;;GAOG;AACH,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,uFAAuF;AACvF,MAAM,MAAM,SAAS,GAAG,WAAW,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;AAExD,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,eAAe,GAAG,MAAM,CAAC;IAClC,MAAM,EAAE,cAAc,GAAG,MAAM,CAAC;IAChC,wDAAwD;IACxD,MAAM,EAAE,OAAO,EAAE,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,iEAAiE;IACjE,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,8CAA8C;IAC9C,SAAS,EAAE,OAAO,EAAE,CAAC;IACrB,4DAA4D;IAC5D,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,4EAA4E;AAC5E,qBAAa,aAAc,SAAQ,KAAK;IACtC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;gBACb,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM;CAK7C;AAED,qDAAqD;AACrD,wBAAgB,UAAU,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAE1D;AAED,yEAAyE;AACzE,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAElE;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,eAAe,CAC7B,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GACjC,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAkB7B;AA0BD,MAAM,WAAW,qBAAqB;IACpC,qCAAqC;IACrC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,qEAAqE;IACrE,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,2CAA2C;IAC3C,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,qBAAa,cAAc;IACzB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAqB;IAC5C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;gBAEvB,IAAI,GAAE,qBAA0B;IAa5C,IAAI,UAAU,IAAI,OAAO,CAExB;YAEa,IAAI;IAmDlB;;;;;;OAMG;IACG,MAAM,CACV,SAAS,EAAE,MAAM,EACjB,IAAI,GAAE;QACJ,KAAK,CAAC,EAAE,OAAO,CAAC;QAChB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;QACnC,SAAS,CAAC,EAAE,MAAM,CAAC;KACf,GACL,OAAO,CAAC,cAAc,CAAC;IAU1B,gDAAgD;IAC1C,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;CAoBvD"}