@testsmith/api-spector 0.6.0 → 0.6.2

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 (42) hide show
  1. package/docs/ai/api-spector-scripting-reference.md +149 -0
  2. package/docs/ai/collection-file-format.md +110 -0
  3. package/docs/ai/functional-testing-guide.md +145 -0
  4. package/docs/ai/security-testing-guide.md +253 -0
  5. package/out/main/agents.js +2 -1
  6. package/out/main/chunks/{snapshots-Y33M1SEy.js → broker-client-WEymdqAK.js} +119 -10
  7. package/out/main/chunks/{cli-common-BKYgsbGB.js → cli-common-vASoDfQH.js} +3 -2
  8. package/out/main/chunks/data-files-Br2h3Dt2.js +85 -0
  9. package/out/main/chunks/escape-BwPM4Tf6.js +9 -0
  10. package/out/main/chunks/{handle-BFaeFA0A.js → handle-CL-nWtYA.js} +11 -2
  11. package/out/main/chunks/{import-D9LH0isB.js → import-DdXhO56X.js} +2 -2
  12. package/out/main/chunks/{request-collection-BQIo1765.js → request-collection-Hqh3I3rs.js} +75 -15
  13. package/out/main/chunks/{request-exec-5_3279w1.js → request-exec-DAFA6Fap.js} +19 -1
  14. package/out/main/chunks/{soap-handler-CWn3o6Py.js → soap-handler-BAPCALkN.js} +2 -2
  15. package/out/main/compare.js +2 -1
  16. package/out/main/contract.js +50 -147
  17. package/out/main/coverage.js +2 -1
  18. package/out/main/generate-tests.js +2 -1
  19. package/out/main/index.js +131 -36
  20. package/out/main/lib.js +2 -2
  21. package/out/main/mock.js +2 -1
  22. package/out/main/record.js +2 -1
  23. package/out/main/runner.js +95 -13
  24. package/out/main/wsdl.js +5 -4
  25. package/out/preload/index.js +21 -3
  26. package/out/renderer/assets/{GraphQLEditor-DITvPhtG.js → GraphQLEditor-DtppmZJO.js} +3 -1
  27. package/out/renderer/assets/{SoapEditor-Bf-oE-rS.js → SoapEditor-BwSm12wH.js} +4 -2
  28. package/out/renderer/assets/ajv-2MAg6kGF.js +6153 -0
  29. package/out/renderer/assets/codemirror-F6m3Hm1M.js +26552 -0
  30. package/out/renderer/assets/index-B3mtLdU3.css +2 -0
  31. package/out/renderer/assets/{index-MMIHKSKx.js → index-D6-zmXen.js} +17493 -49301
  32. package/out/renderer/index.html +4 -2
  33. package/package.json +4 -2
  34. package/src/cli/agent-templates/aider/conventions.md +10 -0
  35. package/src/cli/agent-templates/claude/skills/api-spector-api-audit.md +135 -0
  36. package/src/cli/agent-templates/claude/skills/api-spector-functional-tests.md +73 -0
  37. package/src/cli/agent-templates/claude/skills/api-spector-generate-mocks.md +182 -0
  38. package/src/cli/agent-templates/claude/skills/api-spector-security-tests.md +73 -0
  39. package/src/cli/agent-templates/copilot/copilot-instructions.md +38 -0
  40. package/src/cli/agent-templates/cursor/rules/api-spector.mdc +21 -0
  41. package/src/cli/agent-templates/windsurf/windsurfrules +19 -0
  42. package/out/renderer/assets/index-CkHujZU3.css +0 -2
@@ -40,7 +40,13 @@ const IPC = {
40
40
  secret: {
41
41
  checkMasterKey: "secret:checkMasterKey",
42
42
  setMasterKey: "secret:setMasterKey",
43
- set: "secret:set"
43
+ set: "secret:set",
44
+ has: "secret:has",
45
+ delete: "secret:delete"
46
+ },
47
+ // ─── AI (optional; key lives only in the OS keychain) ────────────────────────
48
+ ai: {
49
+ generateDocs: "ai:generateDocs"
44
50
  },
45
51
  // ─── Global variables ──────────────────────────────────────────────────────
46
52
  globals: {
@@ -164,6 +170,7 @@ const IPC = {
164
170
  branches: "git:branches",
165
171
  checkout: "git:checkout",
166
172
  deleteBranch: "git:deleteBranch",
173
+ fetch: "git:fetch",
167
174
  pull: "git:pull",
168
175
  push: "git:push",
169
176
  remotes: "git:remotes",
@@ -173,7 +180,9 @@ const IPC = {
173
180
  writeCiFile: "git:writeCiFile",
174
181
  resolveOurs: "git:resolveOurs",
175
182
  resolveTheirs: "git:resolveTheirs",
176
- markResolved: "git:markResolved"
183
+ markResolved: "git:markResolved",
184
+ readConflict: "git:readConflict",
185
+ writeResolved: "git:writeResolved"
177
186
  },
178
187
  // ─── Recorder ──────────────────────────────────────────────────────────────
179
188
  record: {
@@ -246,6 +255,12 @@ const api = {
246
255
  setMasterKey: (value) => electron.ipcRenderer.invoke(IPC.secret.setMasterKey, value),
247
256
  /** Save a named secret to the OS keychain (safeStorage). */
248
257
  setSecret: (ref, value) => electron.ipcRenderer.invoke(IPC.secret.set, ref, value),
258
+ /** Whether a secret exists (never returns the value itself). */
259
+ hasSecret: (ref) => electron.ipcRenderer.invoke(IPC.secret.has, ref),
260
+ /** Remove a secret from the OS keychain. */
261
+ deleteSecret: (ref) => electron.ipcRenderer.invoke(IPC.secret.delete, ref),
262
+ /** Optional: generate markdown docs for an item via the configured LLM. */
263
+ generateDocs: (input) => electron.ipcRenderer.invoke(IPC.ai.generateDocs, input),
249
264
  // ─── Globals ──────────────────────────────────────────────────────────────
250
265
  getGlobals: () => electron.ipcRenderer.invoke(IPC.globals.get),
251
266
  setGlobals: (globals) => electron.ipcRenderer.invoke(IPC.globals.set, globals),
@@ -376,7 +391,8 @@ const api = {
376
391
  gitBranches: () => electron.ipcRenderer.invoke(IPC.git.branches),
377
392
  gitCheckout: (branch, create) => electron.ipcRenderer.invoke(IPC.git.checkout, branch, create),
378
393
  gitDeleteBranch: (name, force = false) => electron.ipcRenderer.invoke(IPC.git.deleteBranch, name, force),
379
- gitPull: () => electron.ipcRenderer.invoke(IPC.git.pull),
394
+ gitFetch: () => electron.ipcRenderer.invoke(IPC.git.fetch),
395
+ gitPull: (rebase = false) => electron.ipcRenderer.invoke(IPC.git.pull, rebase),
380
396
  gitPush: (setUpstream) => electron.ipcRenderer.invoke(IPC.git.push, setUpstream),
381
397
  gitRemotes: () => electron.ipcRenderer.invoke(IPC.git.remotes),
382
398
  gitAddRemote: (name, url) => electron.ipcRenderer.invoke(IPC.git.addRemote, name, url),
@@ -386,6 +402,8 @@ const api = {
386
402
  gitResolveOurs: (filePath) => electron.ipcRenderer.invoke(IPC.git.resolveOurs, filePath),
387
403
  gitResolveTheirs: (filePath) => electron.ipcRenderer.invoke(IPC.git.resolveTheirs, filePath),
388
404
  gitMarkResolved: (filePath) => electron.ipcRenderer.invoke(IPC.git.markResolved, filePath),
405
+ gitReadConflict: (filePath) => electron.ipcRenderer.invoke(IPC.git.readConflict, filePath),
406
+ gitWriteResolved: (filePath, content) => electron.ipcRenderer.invoke(IPC.git.writeResolved, filePath, content),
389
407
  // ─── Recorder ─────────────────────────────────────────────────────────────
390
408
  recordStart: (config) => electron.ipcRenderer.invoke(IPC.record.start, config),
391
409
  recordStop: () => electron.ipcRenderer.invoke(IPC.record.stop),
@@ -1,4 +1,6 @@
1
- import { l as linter, E as EditorView, L as LanguageSupport, a as LRLanguage, s as styleTags, i as indentNodeProp, d as delimitedIndent, f as foldNodeProp, b as foldInside, S as StateField, c as LRParser, e as StateEffect, t as tags, u as useT, r as reactExports, g as useStore, h as useActiveEnvironment, j as jsxRuntimeExports, R as ReactCodeMirror, o as oneDark, k as json } from "./index-MMIHKSKx.js";
1
+ import { l as linter, E as EditorView, L as LanguageSupport, e as LRLanguage, s as styleTags, i as indentNodeProp, f as delimitedIndent, m as foldNodeProp, n as foldInside, S as StateField, p as LRParser, q as StateEffect, u as tags, r as reactExports, j as jsxRuntimeExports, c as ReactCodeMirror, o as oneDark, b as json } from "./codemirror-F6m3Hm1M.js";
2
+ import { u as useT, a as useStore, b as useActiveEnvironment } from "./index-D6-zmXen.js";
3
+ import "./ajv-2MAg6kGF.js";
2
4
  function devAssert(condition, message) {
3
5
  const booleanCondition = Boolean(condition);
4
6
  if (!booleanCondition) {
@@ -1,4 +1,6 @@
1
- import { u as useT, r as reactExports, j as jsxRuntimeExports, R as ReactCodeMirror, m as commentKeymap, o as oneDark, x as xml } from "./index-MMIHKSKx.js";
1
+ import { r as reactExports, j as jsxRuntimeExports, c as ReactCodeMirror, o as oneDark, x as xml } from "./codemirror-F6m3Hm1M.js";
2
+ import { u as useT, c as btnPrimaryCls, d as commentKeymap } from "./index-D6-zmXen.js";
3
+ import "./ajv-2MAg6kGF.js";
2
4
  const SOAP_11_CONTENT_TYPE = "text/xml; charset=utf-8";
3
5
  const SOAP_12_CONTENT_TYPE = "application/soap+xml; charset=utf-8";
4
6
  function contentTypeForSoap(version) {
@@ -120,7 +122,7 @@ function SoapEditor({ request, onChange }) {
120
122
  {
121
123
  onClick: fetchWsdl,
122
124
  disabled: fetching || !soap.wsdlUrl.trim(),
123
- className: "px-3 py-1.5 text-xs bg-blue-700 hover:bg-blue-600 disabled:bg-surface-800 disabled:text-surface-600 rounded transition-colors whitespace-nowrap",
125
+ className: `${btnPrimaryCls} whitespace-nowrap`,
124
126
  children: fetching ? t("Fetching…") : operations.length > 0 ? t("Refresh") : t("Fetch WSDL")
125
127
  }
126
128
  )