sapper-ai 0.8.1 → 0.9.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.
package/dist/auth.d.ts CHANGED
@@ -3,6 +3,13 @@ export declare function loadOpenAiApiKey(options?: {
3
3
  env?: NodeJS.ProcessEnv;
4
4
  authPath?: string;
5
5
  }): Promise<string | null>;
6
+ export declare function loadOpenAiOrgConfig(options?: {
7
+ env?: NodeJS.ProcessEnv;
8
+ authPath?: string;
9
+ }): Promise<{
10
+ orgId: string | null;
11
+ projectId: string | null;
12
+ }>;
6
13
  export declare function maskApiKey(apiKey: string): string;
7
14
  export declare function promptAndSaveOpenAiApiKey(options?: {
8
15
  authPath?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"AAkBA,wBAAgB,WAAW,IAAI,MAAM,CAEpC;AAED,wBAAsB,gBAAgB,CAAC,OAAO,GAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAkB3H;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAIjD;AAED,wBAAsB,yBAAyB,CAAC,OAAO,GAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CA2B1H"}
1
+ {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"AAoBA,wBAAgB,WAAW,IAAI,MAAM,CAEpC;AAED,wBAAsB,gBAAgB,CAAC,OAAO,GAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAkB3H;AAED,wBAAsB,mBAAmB,CACvC,OAAO,GAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAO,GAC3D,OAAO,CAAC;IAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAAC,CA0B7D;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAIjD;AAED,wBAAsB,yBAAyB,CAAC,OAAO,GAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CA2B1H"}
package/dist/auth.js CHANGED
@@ -38,6 +38,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
38
38
  Object.defineProperty(exports, "__esModule", { value: true });
39
39
  exports.getAuthPath = getAuthPath;
40
40
  exports.loadOpenAiApiKey = loadOpenAiApiKey;
41
+ exports.loadOpenAiOrgConfig = loadOpenAiOrgConfig;
41
42
  exports.maskApiKey = maskApiKey;
42
43
  exports.promptAndSaveOpenAiApiKey = promptAndSaveOpenAiApiKey;
43
44
  const node_os_1 = require("node:os");
@@ -69,6 +70,31 @@ async function loadOpenAiApiKey(options = {}) {
69
70
  return null;
70
71
  }
71
72
  }
73
+ async function loadOpenAiOrgConfig(options = {}) {
74
+ const env = options.env ?? process.env;
75
+ const orgIdFromEnv = env.OPENAI_ORG_ID;
76
+ const projectIdFromEnv = env.OPENAI_PROJECT_ID;
77
+ if (isNonEmptyString(orgIdFromEnv) || isNonEmptyString(projectIdFromEnv)) {
78
+ return {
79
+ orgId: isNonEmptyString(orgIdFromEnv) ? orgIdFromEnv.trim() : null,
80
+ projectId: isNonEmptyString(projectIdFromEnv) ? projectIdFromEnv.trim() : null,
81
+ };
82
+ }
83
+ const authPath = options.authPath ?? getAuthPath();
84
+ const raw = await (0, fs_1.readFileIfExists)(authPath);
85
+ if (raw === null)
86
+ return { orgId: null, projectId: null };
87
+ try {
88
+ const parsed = JSON.parse(raw);
89
+ return {
90
+ orgId: isNonEmptyString(parsed.openai?.orgId) ? parsed.openai.orgId.trim() : null,
91
+ projectId: isNonEmptyString(parsed.openai?.projectId) ? parsed.openai.projectId.trim() : null,
92
+ };
93
+ }
94
+ catch {
95
+ return { orgId: null, projectId: null };
96
+ }
97
+ }
72
98
  function maskApiKey(apiKey) {
73
99
  const trimmed = apiKey.trim();
74
100
  if (trimmed.length <= 3)
package/dist/cli.js CHANGED
@@ -989,7 +989,8 @@ function isDirectExecution(argv) {
989
989
  if (!entry) {
990
990
  return false;
991
991
  }
992
- return entry.endsWith('/cli.js') || entry.endsWith('\\cli.js') || entry.endsWith('/cli.ts');
992
+ const base = entry.replace(/\\/g, '/').split('/').pop() ?? '';
993
+ return base === 'cli.js' || base === 'cli.ts' || base === 'sapper-ai';
993
994
  }
994
995
  if (isDirectExecution(process.argv)) {
995
996
  runCli().then((exitCode) => {
@@ -1 +1 @@
1
- {"version":3,"file":"scan.d.ts","sourceRoot":"","sources":["../src/scan.ts"],"names":[],"mappings":"AAyBA,MAAM,WAAW,WAAW;IAC1B,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;IAClB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,GAAG,CAAC,EAAE,OAAO,CAAA;IACb,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,EAAE,CAAC,EAAE,OAAO,CAAA;IACZ,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB;AAiBD,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,KAAK,CAAA;IACd,SAAS,EAAE,MAAM,CAAA;IACjB,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;IACd,EAAE,EAAE,OAAO,CAAA;IACX,OAAO,EAAE;QACP,cAAc,EAAE,OAAO,CAAA;KACxB,CAAA;IACD,OAAO,EAAE;QACP,UAAU,EAAE,MAAM,CAAA;QAClB,aAAa,EAAE,MAAM,CAAA;QACrB,YAAY,EAAE,MAAM,CAAA;QACpB,YAAY,EAAE,MAAM,CAAA;QACpB,kBAAkB,EAAE,MAAM,CAAA;QAC1B,wBAAwB,EAAE,MAAM,CAAA;QAChC,OAAO,EAAE,MAAM,CAAA;KAChB,CAAA;IACD,QAAQ,EAAE,KAAK,CAAC;QACd,QAAQ,EAAE,MAAM,CAAA;QAChB,IAAI,EAAE,MAAM,CAAA;QACZ,UAAU,EAAE,MAAM,CAAA;QAClB,MAAM,EAAE,MAAM,CAAA;QACd,QAAQ,EAAE,MAAM,EAAE,CAAA;QAClB,OAAO,EAAE,MAAM,EAAE,CAAA;QACjB,OAAO,EAAE,MAAM,CAAA;QACf,SAAS,EAAE,MAAM,EAAE,CAAA;QACnB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;QACzB,WAAW,EAAE,KAAK,CAAC;YACjB,KAAK,EAAE,MAAM,CAAA;YACb,QAAQ,EAAE,MAAM,GAAG,QAAQ,CAAA;YAC3B,SAAS,EAAE,MAAM,CAAA;YACjB,OAAO,EAAE,MAAM,CAAA;SAChB,CAAC,CAAA;KACH,CAAC,CAAA;CACH;AA8XD,wBAAsB,OAAO,CAAC,OAAO,GAAE,WAAgB,GAAG,OAAO,CAAC,MAAM,CAAC,CAgSxE"}
1
+ {"version":3,"file":"scan.d.ts","sourceRoot":"","sources":["../src/scan.ts"],"names":[],"mappings":"AAyBA,MAAM,WAAW,WAAW;IAC1B,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;IAClB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,GAAG,CAAC,EAAE,OAAO,CAAA;IACb,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,EAAE,CAAC,EAAE,OAAO,CAAA;IACZ,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB;AAiBD,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,KAAK,CAAA;IACd,SAAS,EAAE,MAAM,CAAA;IACjB,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;IACd,EAAE,EAAE,OAAO,CAAA;IACX,OAAO,EAAE;QACP,cAAc,EAAE,OAAO,CAAA;KACxB,CAAA;IACD,OAAO,EAAE;QACP,UAAU,EAAE,MAAM,CAAA;QAClB,aAAa,EAAE,MAAM,CAAA;QACrB,YAAY,EAAE,MAAM,CAAA;QACpB,YAAY,EAAE,MAAM,CAAA;QACpB,kBAAkB,EAAE,MAAM,CAAA;QAC1B,wBAAwB,EAAE,MAAM,CAAA;QAChC,OAAO,EAAE,MAAM,CAAA;KAChB,CAAA;IACD,QAAQ,EAAE,KAAK,CAAC;QACd,QAAQ,EAAE,MAAM,CAAA;QAChB,IAAI,EAAE,MAAM,CAAA;QACZ,UAAU,EAAE,MAAM,CAAA;QAClB,MAAM,EAAE,MAAM,CAAA;QACd,QAAQ,EAAE,MAAM,EAAE,CAAA;QAClB,OAAO,EAAE,MAAM,EAAE,CAAA;QACjB,OAAO,EAAE,MAAM,CAAA;QACf,SAAS,EAAE,MAAM,EAAE,CAAA;QACnB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;QACzB,WAAW,EAAE,KAAK,CAAC;YACjB,KAAK,EAAE,MAAM,CAAA;YACb,QAAQ,EAAE,MAAM,GAAG,QAAQ,CAAA;YAC3B,SAAS,EAAE,MAAM,CAAA;YACjB,OAAO,EAAE,MAAM,CAAA;SAChB,CAAC,CAAA;KACH,CAAC,CAAA;CACH;AA8XD,wBAAsB,OAAO,CAAC,OAAO,GAAE,WAAgB,GAAG,OAAO,CAAC,MAAM,CAAC,CAuSxE"}
package/dist/scan.js CHANGED
@@ -376,7 +376,14 @@ async function runScan(options = {}) {
376
376
  console.log(`${colors.dim} Key saved to ${displayAuthPath}${colors.reset}`);
377
377
  console.log();
378
378
  }
379
- llmConfig = { provider: 'openai', apiKey, model: 'gpt-4.1-mini' };
379
+ const { orgId, projectId } = await (0, auth_1.loadOpenAiOrgConfig)();
380
+ llmConfig = {
381
+ provider: 'openai',
382
+ apiKey,
383
+ model: 'gpt-4.1-mini',
384
+ ...(orgId ? { orgId } : {}),
385
+ ...(projectId ? { projectId } : {}),
386
+ };
380
387
  }
381
388
  const deep = options.system ? true : options.deep !== false;
382
389
  const targets = options.system === true
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sapper-ai",
3
- "version": "0.8.1",
3
+ "version": "0.9.0",
4
4
  "description": "AI security guardrails - single install, sensible defaults",
5
5
  "keywords": [
6
6
  "security",
@@ -45,9 +45,9 @@
45
45
  "dependencies": {
46
46
  "@inquirer/password": "^4.0.0",
47
47
  "@inquirer/select": "^4.0.0",
48
- "@sapper-ai/core": "0.3.0",
49
- "@sapper-ai/types": "0.3.0",
50
- "@sapper-ai/mcp": "0.3.2"
48
+ "@sapper-ai/core": "0.4.0",
49
+ "@sapper-ai/mcp": "0.3.3",
50
+ "@sapper-ai/types": "0.4.0"
51
51
  },
52
52
  "devDependencies": {
53
53
  "@types/node": "^20.0.0",