@spec0/cli 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.
- package/AGENTS.md +67 -0
- package/LICENSE +21 -0
- package/README.md +235 -0
- package/dist/commands/api/changelog.d.ts +9 -0
- package/dist/commands/api/changelog.d.ts.map +1 -0
- package/dist/commands/api/changelog.js +144 -0
- package/dist/commands/api/changelog.js.map +1 -0
- package/dist/commands/api/index.d.ts +6 -0
- package/dist/commands/api/index.d.ts.map +1 -0
- package/dist/commands/api/index.js +13 -0
- package/dist/commands/api/index.js.map +1 -0
- package/dist/commands/api/list.d.ts +10 -0
- package/dist/commands/api/list.d.ts.map +1 -0
- package/dist/commands/api/list.js +79 -0
- package/dist/commands/api/list.js.map +1 -0
- package/dist/commands/api/show.d.ts +9 -0
- package/dist/commands/api/show.d.ts.map +1 -0
- package/dist/commands/api/show.js +88 -0
- package/dist/commands/api/show.js.map +1 -0
- package/dist/commands/auth.d.ts +6 -0
- package/dist/commands/auth.d.ts.map +1 -0
- package/dist/commands/auth.js +166 -0
- package/dist/commands/auth.js.map +1 -0
- package/dist/commands/ci/generate.d.ts +10 -0
- package/dist/commands/ci/generate.d.ts.map +1 -0
- package/dist/commands/ci/generate.js +72 -0
- package/dist/commands/ci/generate.js.map +1 -0
- package/dist/commands/ci/index.d.ts +3 -0
- package/dist/commands/ci/index.d.ts.map +1 -0
- package/dist/commands/ci/index.js +6 -0
- package/dist/commands/ci/index.js.map +1 -0
- package/dist/commands/commands.d.ts +19 -0
- package/dist/commands/commands.d.ts.map +1 -0
- package/dist/commands/commands.js +127 -0
- package/dist/commands/commands.js.map +1 -0
- package/dist/commands/diff.d.ts +6 -0
- package/dist/commands/diff.d.ts.map +1 -0
- package/dist/commands/diff.js +102 -0
- package/dist/commands/diff.js.map +1 -0
- package/dist/commands/doctor.d.ts +11 -0
- package/dist/commands/doctor.d.ts.map +1 -0
- package/dist/commands/doctor.js +54 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/init.d.ts +6 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +67 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/lint.d.ts +6 -0
- package/dist/commands/lint.d.ts.map +1 -0
- package/dist/commands/lint.js +109 -0
- package/dist/commands/lint.js.map +1 -0
- package/dist/commands/log.d.ts +6 -0
- package/dist/commands/log.d.ts.map +1 -0
- package/dist/commands/log.js +95 -0
- package/dist/commands/log.js.map +1 -0
- package/dist/commands/mcp.d.ts +6 -0
- package/dist/commands/mcp.d.ts.map +1 -0
- package/dist/commands/mcp.js +59 -0
- package/dist/commands/mcp.js.map +1 -0
- package/dist/commands/mock/create.d.ts +14 -0
- package/dist/commands/mock/create.d.ts.map +1 -0
- package/dist/commands/mock/create.js +75 -0
- package/dist/commands/mock/create.js.map +1 -0
- package/dist/commands/mock/index.d.ts +9 -0
- package/dist/commands/mock/index.d.ts.map +1 -0
- package/dist/commands/mock/index.js +18 -0
- package/dist/commands/mock/index.js.map +1 -0
- package/dist/commands/mock/list.d.ts +8 -0
- package/dist/commands/mock/list.d.ts.map +1 -0
- package/dist/commands/mock/list.js +52 -0
- package/dist/commands/mock/list.js.map +1 -0
- package/dist/commands/mock/show.d.ts +9 -0
- package/dist/commands/mock/show.d.ts.map +1 -0
- package/dist/commands/mock/show.js +68 -0
- package/dist/commands/mock/show.js.map +1 -0
- package/dist/commands/mock/url.d.ts +10 -0
- package/dist/commands/mock/url.d.ts.map +1 -0
- package/dist/commands/mock/url.js +42 -0
- package/dist/commands/mock/url.js.map +1 -0
- package/dist/commands/mock.d.ts +6 -0
- package/dist/commands/mock.d.ts.map +1 -0
- package/dist/commands/mock.js +116 -0
- package/dist/commands/mock.js.map +1 -0
- package/dist/commands/publish.d.ts +11 -0
- package/dist/commands/publish.d.ts.map +1 -0
- package/dist/commands/publish.js +242 -0
- package/dist/commands/publish.js.map +1 -0
- package/dist/commands/pull.d.ts +6 -0
- package/dist/commands/pull.d.ts.map +1 -0
- package/dist/commands/pull.js +62 -0
- package/dist/commands/pull.js.map +1 -0
- package/dist/commands/push.d.ts +18 -0
- package/dist/commands/push.d.ts.map +1 -0
- package/dist/commands/push.js +302 -0
- package/dist/commands/push.js.map +1 -0
- package/dist/commands/register.d.ts +6 -0
- package/dist/commands/register.d.ts.map +1 -0
- package/dist/commands/register.js +213 -0
- package/dist/commands/register.js.map +1 -0
- package/dist/commands/search.d.ts +6 -0
- package/dist/commands/search.d.ts.map +1 -0
- package/dist/commands/search.js +58 -0
- package/dist/commands/search.js.map +1 -0
- package/dist/commands/status.d.ts +6 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +86 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/sync-status.d.ts +14 -0
- package/dist/commands/sync-status.d.ts.map +1 -0
- package/dist/commands/sync-status.js +119 -0
- package/dist/commands/sync-status.js.map +1 -0
- package/dist/commands/team.d.ts +6 -0
- package/dist/commands/team.d.ts.map +1 -0
- package/dist/commands/team.js +30 -0
- package/dist/commands/team.js.map +1 -0
- package/dist/commands/version.d.ts +6 -0
- package/dist/commands/version.d.ts.map +1 -0
- package/dist/commands/version.js +31 -0
- package/dist/commands/version.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +61 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/agent-mode.d.ts +25 -0
- package/dist/lib/agent-mode.d.ts.map +1 -0
- package/dist/lib/agent-mode.js +36 -0
- package/dist/lib/agent-mode.js.map +1 -0
- package/dist/lib/api-client.d.ts +37 -0
- package/dist/lib/api-client.d.ts.map +1 -0
- package/dist/lib/api-client.js +144 -0
- package/dist/lib/api-client.js.map +1 -0
- package/dist/lib/auth-context.d.ts +18 -0
- package/dist/lib/auth-context.d.ts.map +1 -0
- package/dist/lib/auth-context.js +48 -0
- package/dist/lib/auth-context.js.map +1 -0
- package/dist/lib/breaking-change.d.ts +12 -0
- package/dist/lib/breaking-change.d.ts.map +1 -0
- package/dist/lib/breaking-change.js +10 -0
- package/dist/lib/breaking-change.js.map +1 -0
- package/dist/lib/ci-detect.d.ts +33 -0
- package/dist/lib/ci-detect.d.ts.map +1 -0
- package/dist/lib/ci-detect.js +136 -0
- package/dist/lib/ci-detect.js.map +1 -0
- package/dist/lib/cli-spec-path.d.ts +6 -0
- package/dist/lib/cli-spec-path.d.ts.map +1 -0
- package/dist/lib/cli-spec-path.js +34 -0
- package/dist/lib/cli-spec-path.js.map +1 -0
- package/dist/lib/codeowners.d.ts +11 -0
- package/dist/lib/codeowners.d.ts.map +1 -0
- package/dist/lib/codeowners.js +43 -0
- package/dist/lib/codeowners.js.map +1 -0
- package/dist/lib/config.d.ts +24 -0
- package/dist/lib/config.d.ts.map +1 -0
- package/dist/lib/config.js +49 -0
- package/dist/lib/config.js.map +1 -0
- package/dist/lib/deprecation.d.ts +17 -0
- package/dist/lib/deprecation.d.ts.map +1 -0
- package/dist/lib/deprecation.js +22 -0
- package/dist/lib/deprecation.js.map +1 -0
- package/dist/lib/doctor.d.ts +40 -0
- package/dist/lib/doctor.d.ts.map +1 -0
- package/dist/lib/doctor.js +107 -0
- package/dist/lib/doctor.js.map +1 -0
- package/dist/lib/exit-codes.d.ts +51 -0
- package/dist/lib/exit-codes.d.ts.map +1 -0
- package/dist/lib/exit-codes.js +78 -0
- package/dist/lib/exit-codes.js.map +1 -0
- package/dist/lib/lint.d.ts +18 -0
- package/dist/lib/lint.d.ts.map +1 -0
- package/dist/lib/lint.js +41 -0
- package/dist/lib/lint.js.map +1 -0
- package/dist/lib/local-config-yaml.d.ts +14 -0
- package/dist/lib/local-config-yaml.d.ts.map +1 -0
- package/dist/lib/local-config-yaml.js +29 -0
- package/dist/lib/local-config-yaml.js.map +1 -0
- package/dist/lib/output/index.d.ts +69 -0
- package/dist/lib/output/index.d.ts.map +1 -0
- package/dist/lib/output/index.js +120 -0
- package/dist/lib/output/index.js.map +1 -0
- package/dist/lib/output/table.d.ts +19 -0
- package/dist/lib/output/table.d.ts.map +1 -0
- package/dist/lib/output/table.js +48 -0
- package/dist/lib/output/table.js.map +1 -0
- package/dist/lib/output.d.ts +32 -0
- package/dist/lib/output.d.ts.map +1 -0
- package/dist/lib/output.js +64 -0
- package/dist/lib/output.js.map +1 -0
- package/dist/lib/platform-defaults.d.ts +27 -0
- package/dist/lib/platform-defaults.d.ts.map +1 -0
- package/dist/lib/platform-defaults.js +36 -0
- package/dist/lib/platform-defaults.js.map +1 -0
- package/dist/lib/ref-resolver.d.ts +37 -0
- package/dist/lib/ref-resolver.d.ts.map +1 -0
- package/dist/lib/ref-resolver.js +56 -0
- package/dist/lib/ref-resolver.js.map +1 -0
- package/dist/lib/registry-ref.d.ts +10 -0
- package/dist/lib/registry-ref.d.ts.map +1 -0
- package/dist/lib/registry-ref.js +18 -0
- package/dist/lib/registry-ref.js.map +1 -0
- package/dist/lib/spec-finder.d.ts +6 -0
- package/dist/lib/spec-finder.d.ts.map +1 -0
- package/dist/lib/spec-finder.js +42 -0
- package/dist/lib/spec-finder.js.map +1 -0
- package/dist/lib/update-check.d.ts +12 -0
- package/dist/lib/update-check.d.ts.map +1 -0
- package/dist/lib/update-check.js +62 -0
- package/dist/lib/update-check.js.map +1 -0
- package/dist/lib/version.d.ts +17 -0
- package/dist/lib/version.d.ts.map +1 -0
- package/dist/lib/version.js +33 -0
- package/dist/lib/version.js.map +1 -0
- package/dist/lib/winspect-yaml.d.ts +14 -0
- package/dist/lib/winspect-yaml.d.ts.map +1 -0
- package/dist/lib/winspect-yaml.js +28 -0
- package/dist/lib/winspect-yaml.js.map +1 -0
- package/dist/types.d.ts +664 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +6 -0
- package/dist/types.js.map +1 -0
- package/package.json +87 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"team.js","sourceRoot":"","sources":["../../src/commands/team.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,MAAM,UAAU,oBAAoB,CAAC,OAAgB;IACnD,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,WAAW,CAAC,iBAAiB,CAAC,CAAC;IAEpE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE;QAC/D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,gCAAgC,CAAC,CAAC,CAAC;IAC9D,CAAC,CAAC,CAAC;IAEH,IAAI;SACD,OAAO,CAAC,eAAe,CAAC;SACxB,WAAW,CAAC,aAAa,CAAC;SAC1B,MAAM,CAAC,KAAK,EAAE,IAAY,EAAE,EAAE;QAC7B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,eAAe,IAAI,uBAAuB,CAAC,CAAC,CAAC;IACxE,CAAC,CAAC,CAAC;IAEL,IAAI;SACD,OAAO,CAAC,gBAAgB,CAAC;SACzB,WAAW,CAAC,qBAAqB,CAAC;SAClC,MAAM,CAAC,eAAe,EAAE,WAAW,CAAC;SACpC,MAAM,CAAC,KAAK,EAAE,KAAa,EAAE,IAAuB,EAAE,EAAE;QACvD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,kCAAkC,CAAC,CAAC,CAAC;IAChE,CAAC,CAAC,CAAC;IAEL,IAAI;SACD,OAAO,CAAC,gBAAgB,CAAC;SACzB,WAAW,CAAC,mBAAmB,CAAC;SAChC,MAAM,CAAC,KAAK,EAAE,IAAY,EAAE,EAAE;QAC7B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,gBAAgB,IAAI,uBAAuB,CAAC,CAAC,CAAC;IACzE,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../src/commands/version.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,QAwBtD"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* spec0 version — CLI and runtime info
|
|
3
|
+
*/
|
|
4
|
+
import { getVersionInfo } from "../lib/version.js";
|
|
5
|
+
import { emit, resolveOutputContext } from "../lib/output/index.js";
|
|
6
|
+
import { warnDeprecated } from "../lib/deprecation.js";
|
|
7
|
+
export function registerVersionCommand(program) {
|
|
8
|
+
program
|
|
9
|
+
.command("version")
|
|
10
|
+
.description("Print CLI version, Node.js version, and optional git ref (SPEC0_CLI_GIT_REF)")
|
|
11
|
+
.option("--output <format>", "Output format: text, json, or yaml (default: text)")
|
|
12
|
+
.option("--json", "Deprecated. Use --output=json instead.")
|
|
13
|
+
.action((opts) => {
|
|
14
|
+
if (opts.json) {
|
|
15
|
+
warnDeprecated({
|
|
16
|
+
what: "the --json flag on `spec0 version`",
|
|
17
|
+
removeIn: "v1.0.0",
|
|
18
|
+
alternative: "--output=json",
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
const ctx = resolveOutputContext(opts);
|
|
22
|
+
const info = getVersionInfo();
|
|
23
|
+
emit(ctx, info, (data) => {
|
|
24
|
+
const lines = [`${data.name} ${data.version}`, `node ${data.node}`];
|
|
25
|
+
if (data.gitRef)
|
|
26
|
+
lines.push(`ref ${data.gitRef}`);
|
|
27
|
+
return lines.join("\n");
|
|
28
|
+
});
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=version.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/commands/version.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,oBAAoB,EAAsB,MAAM,wBAAwB,CAAC;AACxF,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAEvD,MAAM,UAAU,sBAAsB,CAAC,OAAgB;IACrD,OAAO;SACJ,OAAO,CAAC,SAAS,CAAC;SAClB,WAAW,CAAC,8EAA8E,CAAC;SAC3F,MAAM,CAAC,mBAAmB,EAAE,oDAAoD,CAAC;SACjF,MAAM,CAAC,QAAQ,EAAE,wCAAwC,CAAC;SAC1D,MAAM,CAAC,CAAC,IAAmB,EAAE,EAAE;QAC9B,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACd,cAAc,CAAC;gBACb,IAAI,EAAE,oCAAoC;gBAC1C,QAAQ,EAAE,QAAQ;gBAClB,WAAW,EAAE,eAAe;aAC7B,CAAC,CAAC;QACL,CAAC;QAED,MAAM,GAAG,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC;QACvC,MAAM,IAAI,GAAG,cAAc,EAAE,CAAC;QAE9B,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE;YACvB,MAAM,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;YACpE,IAAI,IAAI,CAAC,MAAM;gBAAE,KAAK,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;YAClD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1B,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACP,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { applyAgentModeEnv, isAgentMode } from "./lib/agent-mode.js";
|
|
3
|
+
// Agent mode: apply environment side-effects (NO_COLOR, FORCE_COLOR=0) and
|
|
4
|
+
// suppress TTY heuristics before anything else does a capability check. See
|
|
5
|
+
// lib/agent-mode.ts for what the mode does and why.
|
|
6
|
+
applyAgentModeEnv();
|
|
7
|
+
if (isAgentMode()) {
|
|
8
|
+
Object.defineProperty(process.stdout, "isTTY", { value: false });
|
|
9
|
+
Object.defineProperty(process.stderr, "isTTY", { value: false });
|
|
10
|
+
}
|
|
11
|
+
import { Command } from "commander";
|
|
12
|
+
import { registerAuthCommands } from "./commands/auth.js";
|
|
13
|
+
import { registerInitCommand } from "./commands/init.js";
|
|
14
|
+
import { registerPublishCommand } from "./commands/publish.js";
|
|
15
|
+
import { registerPushCommand } from "./commands/push.js";
|
|
16
|
+
import { registerMockCommands } from "./commands/mock/index.js";
|
|
17
|
+
import { registerLintCommand } from "./commands/lint.js";
|
|
18
|
+
import { registerPullCommand } from "./commands/pull.js";
|
|
19
|
+
import { registerSearchCommand } from "./commands/search.js";
|
|
20
|
+
import { registerDiffCommand } from "./commands/diff.js";
|
|
21
|
+
import { registerLogCommand } from "./commands/log.js";
|
|
22
|
+
import { registerStatusCommand } from "./commands/status.js";
|
|
23
|
+
import { registerMcpCommands } from "./commands/mcp.js";
|
|
24
|
+
import { registerVersionCommand } from "./commands/version.js";
|
|
25
|
+
import { registerApiCommands } from "./commands/api/index.js";
|
|
26
|
+
import { registerDoctorCommand } from "./commands/doctor.js";
|
|
27
|
+
import { registerSyncStatusCommand } from "./commands/sync-status.js";
|
|
28
|
+
import { registerCiCommands } from "./commands/ci/index.js";
|
|
29
|
+
import { registerCommandsCommand } from "./commands/commands.js";
|
|
30
|
+
import { getCliVersion } from "./lib/version.js";
|
|
31
|
+
import { notifyUpdateIfAvailable } from "./lib/update-check.js";
|
|
32
|
+
const program = new Command();
|
|
33
|
+
program
|
|
34
|
+
.name("spec0")
|
|
35
|
+
.description("Manage and publish OpenAPI specs, run mock servers, and lint — powered by Spec0")
|
|
36
|
+
.version(getCliVersion(), "-V, --version", "Print CLI version")
|
|
37
|
+
.helpOption("-h, --help", "Show help");
|
|
38
|
+
registerVersionCommand(program);
|
|
39
|
+
registerAuthCommands(program);
|
|
40
|
+
registerInitCommand(program);
|
|
41
|
+
registerPushCommand(program);
|
|
42
|
+
registerPublishCommand(program);
|
|
43
|
+
registerMockCommands(program);
|
|
44
|
+
registerLintCommand(program);
|
|
45
|
+
registerPullCommand(program);
|
|
46
|
+
registerSearchCommand(program);
|
|
47
|
+
registerDiffCommand(program);
|
|
48
|
+
registerLogCommand(program);
|
|
49
|
+
registerStatusCommand(program);
|
|
50
|
+
registerMcpCommands(program);
|
|
51
|
+
registerApiCommands(program);
|
|
52
|
+
registerDoctorCommand(program);
|
|
53
|
+
registerSyncStatusCommand(program);
|
|
54
|
+
registerCiCommands(program);
|
|
55
|
+
registerCommandsCommand(program);
|
|
56
|
+
// Skip the update-check banner in agent mode — stderr should be clean.
|
|
57
|
+
if (!isAgentMode()) {
|
|
58
|
+
notifyUpdateIfAvailable(getCliVersion());
|
|
59
|
+
}
|
|
60
|
+
program.parse();
|
|
61
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAErE,2EAA2E;AAC3E,4EAA4E;AAC5E,oDAAoD;AACpD,iBAAiB,EAAE,CAAC;AACpB,IAAI,WAAW,EAAE,EAAE,CAAC;IAClB,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;IACjE,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;AACnE,CAAC;AAED,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,yBAAyB,EAAE,MAAM,2BAA2B,CAAC;AACtE,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAEhE,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,OAAO,CAAC;KACb,WAAW,CAAC,iFAAiF,CAAC;KAC9F,OAAO,CAAC,aAAa,EAAE,EAAE,eAAe,EAAE,mBAAmB,CAAC;KAC9D,UAAU,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;AAEzC,sBAAsB,CAAC,OAAO,CAAC,CAAC;AAChC,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAC9B,mBAAmB,CAAC,OAAO,CAAC,CAAC;AAC7B,mBAAmB,CAAC,OAAO,CAAC,CAAC;AAC7B,sBAAsB,CAAC,OAAO,CAAC,CAAC;AAChC,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAC9B,mBAAmB,CAAC,OAAO,CAAC,CAAC;AAC7B,mBAAmB,CAAC,OAAO,CAAC,CAAC;AAC7B,qBAAqB,CAAC,OAAO,CAAC,CAAC;AAC/B,mBAAmB,CAAC,OAAO,CAAC,CAAC;AAC7B,kBAAkB,CAAC,OAAO,CAAC,CAAC;AAC5B,qBAAqB,CAAC,OAAO,CAAC,CAAC;AAC/B,mBAAmB,CAAC,OAAO,CAAC,CAAC;AAC7B,mBAAmB,CAAC,OAAO,CAAC,CAAC;AAC7B,qBAAqB,CAAC,OAAO,CAAC,CAAC;AAC/B,yBAAyB,CAAC,OAAO,CAAC,CAAC;AACnC,kBAAkB,CAAC,OAAO,CAAC,CAAC;AAC5B,uBAAuB,CAAC,OAAO,CAAC,CAAC;AAEjC,uEAAuE;AACvE,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;IACnB,uBAAuB,CAAC,aAAa,EAAE,CAAC,CAAC;AAC3C,CAAC;AAED,OAAO,CAAC,KAAK,EAAE,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SPEC0_MODE=agent — single switch that flips every agent-friendly default.
|
|
3
|
+
*
|
|
4
|
+
* When set, the CLI behaves deterministically for machine callers:
|
|
5
|
+
* - default output format is JSON (no need to pass --output=json on every cmd)
|
|
6
|
+
* - spinners suppressed (no ANSI control codes in the output stream)
|
|
7
|
+
* - colour suppressed (NO_COLOR semantics)
|
|
8
|
+
* - update-check noise on stderr suppressed
|
|
9
|
+
* - TTY heuristics treated as non-interactive
|
|
10
|
+
*
|
|
11
|
+
* A command may still override the format by passing an explicit --output flag;
|
|
12
|
+
* agent mode only changes defaults, it doesn't block choice.
|
|
13
|
+
*
|
|
14
|
+
* Called once during CLI bootstrap (see src/index.ts) so env-var side-effects
|
|
15
|
+
* — in particular NO_COLOR — land before any module reads them.
|
|
16
|
+
*/
|
|
17
|
+
/** True when the caller has explicitly opted in via SPEC0_MODE=agent. */
|
|
18
|
+
export declare function isAgentMode(): boolean;
|
|
19
|
+
/**
|
|
20
|
+
* Apply the environment-level side-effects. Must run before `chalk` /
|
|
21
|
+
* `ora` / anything else that reads NO_COLOR or checks isTTY at import time.
|
|
22
|
+
* Idempotent — only sets vars that are currently unset.
|
|
23
|
+
*/
|
|
24
|
+
export declare function applyAgentModeEnv(): void;
|
|
25
|
+
//# sourceMappingURL=agent-mode.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-mode.d.ts","sourceRoot":"","sources":["../../src/lib/agent-mode.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,yEAAyE;AACzE,wBAAgB,WAAW,IAAI,OAAO,CAErC;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,IAAI,IAAI,CAMxC"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SPEC0_MODE=agent — single switch that flips every agent-friendly default.
|
|
3
|
+
*
|
|
4
|
+
* When set, the CLI behaves deterministically for machine callers:
|
|
5
|
+
* - default output format is JSON (no need to pass --output=json on every cmd)
|
|
6
|
+
* - spinners suppressed (no ANSI control codes in the output stream)
|
|
7
|
+
* - colour suppressed (NO_COLOR semantics)
|
|
8
|
+
* - update-check noise on stderr suppressed
|
|
9
|
+
* - TTY heuristics treated as non-interactive
|
|
10
|
+
*
|
|
11
|
+
* A command may still override the format by passing an explicit --output flag;
|
|
12
|
+
* agent mode only changes defaults, it doesn't block choice.
|
|
13
|
+
*
|
|
14
|
+
* Called once during CLI bootstrap (see src/index.ts) so env-var side-effects
|
|
15
|
+
* — in particular NO_COLOR — land before any module reads them.
|
|
16
|
+
*/
|
|
17
|
+
/** True when the caller has explicitly opted in via SPEC0_MODE=agent. */
|
|
18
|
+
export function isAgentMode() {
|
|
19
|
+
return (process.env.SPEC0_MODE ?? "").toLowerCase() === "agent";
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Apply the environment-level side-effects. Must run before `chalk` /
|
|
23
|
+
* `ora` / anything else that reads NO_COLOR or checks isTTY at import time.
|
|
24
|
+
* Idempotent — only sets vars that are currently unset.
|
|
25
|
+
*/
|
|
26
|
+
export function applyAgentModeEnv() {
|
|
27
|
+
if (!isAgentMode())
|
|
28
|
+
return;
|
|
29
|
+
if (!process.env.NO_COLOR)
|
|
30
|
+
process.env.NO_COLOR = "1";
|
|
31
|
+
// FORCE_COLOR=0 is a belt-and-braces hint for libraries that honour it
|
|
32
|
+
// instead of NO_COLOR.
|
|
33
|
+
if (!process.env.FORCE_COLOR)
|
|
34
|
+
process.env.FORCE_COLOR = "0";
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=agent-mode.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-mode.js","sourceRoot":"","sources":["../../src/lib/agent-mode.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,yEAAyE;AACzE,MAAM,UAAU,WAAW;IACzB,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,KAAK,OAAO,CAAC;AAClE,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,iBAAiB;IAC/B,IAAI,CAAC,WAAW,EAAE;QAAE,OAAO;IAC3B,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ;QAAE,OAAO,CAAC,GAAG,CAAC,QAAQ,GAAG,GAAG,CAAC;IACtD,uEAAuE;IACvE,uBAAuB;IACvB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW;QAAE,OAAO,CAAC,GAAG,CAAC,WAAW,GAAG,GAAG,CAAC;AAC9D,CAAC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Platform API HTTP client
|
|
3
|
+
*/
|
|
4
|
+
import { type Options } from "got";
|
|
5
|
+
import type { OrgConfig } from "./config.js";
|
|
6
|
+
import type { ResolvedOrgContext } from "./auth-context.js";
|
|
7
|
+
export interface ApiClientOptions {
|
|
8
|
+
apiUrl?: string;
|
|
9
|
+
apiKey?: string;
|
|
10
|
+
orgId?: string;
|
|
11
|
+
}
|
|
12
|
+
declare function orgHeaders(orgId: string, extra?: Record<string, string>): Record<string, string>;
|
|
13
|
+
export declare function createApiClient(org: OrgConfig): {
|
|
14
|
+
get<T = unknown>(path: string, options?: Options): Promise<T>;
|
|
15
|
+
post<T = unknown>(path: string, body?: unknown, options?: Options): Promise<T>;
|
|
16
|
+
put<T = unknown>(path: string, body?: unknown, options?: Options): Promise<T>;
|
|
17
|
+
delete<T = unknown>(path: string, options?: Options): Promise<T>;
|
|
18
|
+
};
|
|
19
|
+
/** Org API key client (discovery, registry, CLI workspace). */
|
|
20
|
+
export declare function createOrgApiClient(ctx: ResolvedOrgContext): {
|
|
21
|
+
baseUrl: string;
|
|
22
|
+
getJson<T = unknown>(path: string, headers?: Record<string, string>): Promise<T>;
|
|
23
|
+
getText(path: string, headers?: Record<string, string>): Promise<string>;
|
|
24
|
+
postJson<T = unknown>(path: string, body: unknown, headers?: Record<string, string>): Promise<T>;
|
|
25
|
+
putJson<T = unknown>(path: string, body: unknown, headers?: Record<string, string>): Promise<T>;
|
|
26
|
+
postMultipart<T = unknown>(path: string, fields: Record<string, {
|
|
27
|
+
content: Buffer | string;
|
|
28
|
+
filename: string;
|
|
29
|
+
}>, headers?: Record<string, string>): Promise<T>;
|
|
30
|
+
deleteJson<T = unknown>(path: string, headers?: Record<string, string>): Promise<T>;
|
|
31
|
+
};
|
|
32
|
+
export { orgHeaders };
|
|
33
|
+
export declare function is401(err: unknown): boolean;
|
|
34
|
+
export declare function is402(err: unknown): boolean;
|
|
35
|
+
/** Extract a human-readable error message from a backend error response. */
|
|
36
|
+
export declare function extractErrorMessage(err: unknown): string | null;
|
|
37
|
+
//# sourceMappingURL=api-client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api-client.d.ts","sourceRoot":"","sources":["../../src/lib/api-client.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAY,EAAE,KAAK,OAAO,EAAE,MAAM,KAAK,CAAC;AACxC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAE5D,MAAM,WAAW,gBAAgB;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,iBAAS,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAEzF;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,SAAS;QAShC,CAAC,kBAAkB,MAAM,YAAY,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC;SASxD,CAAC,kBAAkB,MAAM,SAAS,OAAO,YAAY,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC;QAU1E,CAAC,kBAAkB,MAAM,SAAS,OAAO,YAAY,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC;WAUtE,CAAC,kBAAkB,MAAM,YAAY,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC;EASzE;AAED,+DAA+D;AAC/D,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,kBAAkB;;YASxC,CAAC,kBAAkB,MAAM,YAAY,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;kBAOlE,MAAM,YAAY,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;aAU/D,CAAC,kBACR,MAAM,QACN,OAAO,YACH,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC/B,OAAO,CAAC,CAAC,CAAC;YAaC,CAAC,kBACP,MAAM,QACN,OAAO,YACH,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC/B,OAAO,CAAC,CAAC,CAAC;kBAaO,CAAC,kBACb,MAAM,UACJ,MAAM,CAAC,MAAM,EAAE;QAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,YAC5D,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC/B,OAAO,CAAC,CAAC,CAAC;eAaI,CAAC,kBAAkB,MAAM,YAAY,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;EAQ5F;AAED,OAAO,EAAE,UAAU,EAAE,CAAC;AAEtB,wBAAgB,KAAK,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAE3C;AAED,wBAAgB,KAAK,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAE3C;AAED,4EAA4E;AAC5E,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAQ/D"}
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Platform API HTTP client
|
|
3
|
+
*/
|
|
4
|
+
import got from "got";
|
|
5
|
+
function orgHeaders(orgId, extra) {
|
|
6
|
+
return { "X-Org-Id": orgId, ...extra };
|
|
7
|
+
}
|
|
8
|
+
export function createApiClient(org) {
|
|
9
|
+
const baseUrl = org.apiUrl.replace(/\/$/, "");
|
|
10
|
+
const headers = {
|
|
11
|
+
"Content-Type": "application/json",
|
|
12
|
+
Accept: "application/json",
|
|
13
|
+
Authorization: `Bearer ${org.apiKey}`,
|
|
14
|
+
};
|
|
15
|
+
return {
|
|
16
|
+
async get(path, options) {
|
|
17
|
+
const res = await got.get(`${baseUrl}${path}`, {
|
|
18
|
+
...options,
|
|
19
|
+
headers: { ...headers, ...options?.headers },
|
|
20
|
+
responseType: "json",
|
|
21
|
+
});
|
|
22
|
+
return res.body;
|
|
23
|
+
},
|
|
24
|
+
async post(path, body, options) {
|
|
25
|
+
const res = await got.post(`${baseUrl}${path}`, {
|
|
26
|
+
...options,
|
|
27
|
+
json: body,
|
|
28
|
+
headers: { ...headers, ...options?.headers },
|
|
29
|
+
responseType: "json",
|
|
30
|
+
});
|
|
31
|
+
return res.body;
|
|
32
|
+
},
|
|
33
|
+
async put(path, body, options) {
|
|
34
|
+
const res = await got.put(`${baseUrl}${path}`, {
|
|
35
|
+
...options,
|
|
36
|
+
json: body,
|
|
37
|
+
headers: { ...headers, ...options?.headers },
|
|
38
|
+
responseType: "json",
|
|
39
|
+
});
|
|
40
|
+
return res.body;
|
|
41
|
+
},
|
|
42
|
+
async delete(path, options) {
|
|
43
|
+
const res = await got.delete(`${baseUrl}${path}`, {
|
|
44
|
+
...options,
|
|
45
|
+
headers: { ...headers, ...options?.headers },
|
|
46
|
+
responseType: "json",
|
|
47
|
+
});
|
|
48
|
+
return res.body;
|
|
49
|
+
},
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
/** Org API key client (discovery, registry, CLI workspace). */
|
|
53
|
+
export function createOrgApiClient(ctx) {
|
|
54
|
+
const baseUrl = ctx.apiUrl;
|
|
55
|
+
const baseHeaders = {
|
|
56
|
+
Authorization: `Bearer ${ctx.apiKey}`,
|
|
57
|
+
"X-Org-Id": ctx.orgId,
|
|
58
|
+
};
|
|
59
|
+
return {
|
|
60
|
+
baseUrl,
|
|
61
|
+
async getJson(path, headers) {
|
|
62
|
+
const res = await got.get(`${baseUrl}${path}`, {
|
|
63
|
+
headers: { ...baseHeaders, Accept: "application/json", ...headers },
|
|
64
|
+
responseType: "json",
|
|
65
|
+
});
|
|
66
|
+
return res.body;
|
|
67
|
+
},
|
|
68
|
+
async getText(path, headers) {
|
|
69
|
+
const res = await got.get(`${baseUrl}${path}`, {
|
|
70
|
+
headers: {
|
|
71
|
+
...baseHeaders,
|
|
72
|
+
Accept: "application/yaml, application/json, text/plain, */*",
|
|
73
|
+
...headers,
|
|
74
|
+
},
|
|
75
|
+
});
|
|
76
|
+
return res.body;
|
|
77
|
+
},
|
|
78
|
+
async postJson(path, body, headers) {
|
|
79
|
+
const res = await got.post(`${baseUrl}${path}`, {
|
|
80
|
+
json: body,
|
|
81
|
+
headers: {
|
|
82
|
+
...baseHeaders,
|
|
83
|
+
"Content-Type": "application/json",
|
|
84
|
+
Accept: "application/json",
|
|
85
|
+
...headers,
|
|
86
|
+
},
|
|
87
|
+
responseType: "json",
|
|
88
|
+
});
|
|
89
|
+
return res.body;
|
|
90
|
+
},
|
|
91
|
+
async putJson(path, body, headers) {
|
|
92
|
+
const res = await got.put(`${baseUrl}${path}`, {
|
|
93
|
+
json: body,
|
|
94
|
+
headers: {
|
|
95
|
+
...baseHeaders,
|
|
96
|
+
"Content-Type": "application/json",
|
|
97
|
+
Accept: "application/json",
|
|
98
|
+
...headers,
|
|
99
|
+
},
|
|
100
|
+
responseType: "json",
|
|
101
|
+
});
|
|
102
|
+
return res.body;
|
|
103
|
+
},
|
|
104
|
+
async postMultipart(path, fields, headers) {
|
|
105
|
+
const form = new FormData();
|
|
106
|
+
for (const [name, { content, filename }] of Object.entries(fields)) {
|
|
107
|
+
const blob = new Blob([content], { type: "application/octet-stream" });
|
|
108
|
+
form.append(name, blob, filename);
|
|
109
|
+
}
|
|
110
|
+
const res = await got.post(`${baseUrl}${path}`, {
|
|
111
|
+
body: form,
|
|
112
|
+
headers: { ...baseHeaders, Accept: "application/json", ...headers },
|
|
113
|
+
responseType: "json",
|
|
114
|
+
});
|
|
115
|
+
return res.body;
|
|
116
|
+
},
|
|
117
|
+
async deleteJson(path, headers) {
|
|
118
|
+
const res = await got.delete(`${baseUrl}${path}`, {
|
|
119
|
+
headers: { ...baseHeaders, Accept: "application/json", ...headers },
|
|
120
|
+
responseType: "json",
|
|
121
|
+
});
|
|
122
|
+
return res.body;
|
|
123
|
+
},
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
export { orgHeaders };
|
|
127
|
+
export function is401(err) {
|
|
128
|
+
return err?.response?.statusCode === 401;
|
|
129
|
+
}
|
|
130
|
+
export function is402(err) {
|
|
131
|
+
return err?.response?.statusCode === 402;
|
|
132
|
+
}
|
|
133
|
+
/** Extract a human-readable error message from a backend error response. */
|
|
134
|
+
export function extractErrorMessage(err) {
|
|
135
|
+
const body = err?.response?.body;
|
|
136
|
+
if (typeof body === "object" && body !== null) {
|
|
137
|
+
const b = body;
|
|
138
|
+
const msg = b["message"] ?? b["detail"] ?? b["error"];
|
|
139
|
+
if (msg)
|
|
140
|
+
return String(msg);
|
|
141
|
+
}
|
|
142
|
+
return null;
|
|
143
|
+
}
|
|
144
|
+
//# sourceMappingURL=api-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api-client.js","sourceRoot":"","sources":["../../src/lib/api-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resolve org API URL, token, and org id for CLI commands.
|
|
3
|
+
* Priority: env SPEC0_* > --org flag > default org from config.
|
|
4
|
+
*
|
|
5
|
+
* **`SPEC0_API_URL`** (when set) overrides the API base stored at login for every command,
|
|
6
|
+
* so you can fix a bad `apiUrl` or point at another backend without editing ~/.spec0/config.json.
|
|
7
|
+
*
|
|
8
|
+
* Legacy: `PLATFORM_API_TOKEN` / `PLATFORM_ORG_ID` / `PLATFORM_API_URL` are still accepted.
|
|
9
|
+
*/
|
|
10
|
+
export interface ResolvedOrgContext {
|
|
11
|
+
orgId: string;
|
|
12
|
+
apiKey: string;
|
|
13
|
+
apiUrl: string;
|
|
14
|
+
orgName?: string;
|
|
15
|
+
}
|
|
16
|
+
export declare function resolveOrgContext(optionsOrgId?: string): ResolvedOrgContext | null;
|
|
17
|
+
export declare function requireOrgContext(optionsOrgId?: string): ResolvedOrgContext;
|
|
18
|
+
//# sourceMappingURL=auth-context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth-context.d.ts","sourceRoot":"","sources":["../../src/lib/auth-context.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAKH,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,wBAAgB,iBAAiB,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,kBAAkB,GAAG,IAAI,CA4BlF;AAED,wBAAgB,iBAAiB,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,kBAAkB,CAQ3E"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resolve org API URL, token, and org id for CLI commands.
|
|
3
|
+
* Priority: env SPEC0_* > --org flag > default org from config.
|
|
4
|
+
*
|
|
5
|
+
* **`SPEC0_API_URL`** (when set) overrides the API base stored at login for every command,
|
|
6
|
+
* so you can fix a bad `apiUrl` or point at another backend without editing ~/.spec0/config.json.
|
|
7
|
+
*
|
|
8
|
+
* Legacy: `PLATFORM_API_TOKEN` / `PLATFORM_ORG_ID` / `PLATFORM_API_URL` are still accepted.
|
|
9
|
+
*/
|
|
10
|
+
import { getDefaultOrgId, getOrgConfig } from "./config.js";
|
|
11
|
+
import { resolvedPlatformApiUrl } from "./platform-defaults.js";
|
|
12
|
+
export function resolveOrgContext(optionsOrgId) {
|
|
13
|
+
const token = process.env.SPEC0_TOKEN ?? process.env.PLATFORM_API_TOKEN;
|
|
14
|
+
const envOrg = process.env.SPEC0_ORG_ID ?? process.env.PLATFORM_ORG_ID;
|
|
15
|
+
const envApi = process.env.SPEC0_API_URL ?? process.env.PLATFORM_API_URL;
|
|
16
|
+
if (token && envOrg) {
|
|
17
|
+
const fromConfig = getOrgConfig(envOrg);
|
|
18
|
+
const apiUrl = (envApi ?? fromConfig?.apiUrl ?? resolvedPlatformApiUrl()).replace(/\/$/, "");
|
|
19
|
+
return {
|
|
20
|
+
orgId: envOrg,
|
|
21
|
+
apiKey: token,
|
|
22
|
+
apiUrl,
|
|
23
|
+
orgName: fromConfig?.name,
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
const orgId = optionsOrgId ?? getDefaultOrgId();
|
|
27
|
+
if (!orgId)
|
|
28
|
+
return null;
|
|
29
|
+
const org = getOrgConfig(orgId);
|
|
30
|
+
if (!org)
|
|
31
|
+
return null;
|
|
32
|
+
const storedApi = org.apiUrl?.trim() ? org.apiUrl.replace(/\/$/, "") : resolvedPlatformApiUrl();
|
|
33
|
+
const apiUrl = envApi?.trim() ? envApi.trim().replace(/\/$/, "") : storedApi;
|
|
34
|
+
return {
|
|
35
|
+
orgId,
|
|
36
|
+
apiKey: org.apiKey,
|
|
37
|
+
apiUrl,
|
|
38
|
+
orgName: org.name,
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
export function requireOrgContext(optionsOrgId) {
|
|
42
|
+
const ctx = resolveOrgContext(optionsOrgId);
|
|
43
|
+
if (!ctx) {
|
|
44
|
+
throw new Error("Not authenticated. Run 'spec0 auth login' to log in, or set SPEC0_TOKEN and SPEC0_ORG_ID environment variables.");
|
|
45
|
+
}
|
|
46
|
+
return ctx;
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=auth-context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth-context.js","sourceRoot":"","sources":["../../src/lib/auth-context.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC5D,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAShE,MAAM,UAAU,iBAAiB,CAAC,YAAqB;IACrD,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC;IACxE,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC;IACvE,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC;IAEzE,IAAI,KAAK,IAAI,MAAM,EAAE,CAAC;QACpB,MAAM,UAAU,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;QACxC,MAAM,MAAM,GAAG,CAAC,MAAM,IAAI,UAAU,EAAE,MAAM,IAAI,sBAAsB,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QAC7F,OAAO;YACL,KAAK,EAAE,MAAM;YACb,MAAM,EAAE,KAAK;YACb,MAAM;YACN,OAAO,EAAE,UAAU,EAAE,IAAI;SAC1B,CAAC;IACJ,CAAC;IAED,MAAM,KAAK,GAAG,YAAY,IAAI,eAAe,EAAE,CAAC;IAChD,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACxB,MAAM,GAAG,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;IAChC,IAAI,CAAC,GAAG;QAAE,OAAO,IAAI,CAAC;IACtB,MAAM,SAAS,GAAG,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,sBAAsB,EAAE,CAAC;IAChG,MAAM,MAAM,GAAG,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC7E,OAAO;QACL,KAAK;QACL,MAAM,EAAE,GAAG,CAAC,MAAM;QAClB,MAAM;QACN,OAAO,EAAE,GAAG,CAAC,IAAI;KAClB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,YAAqB;IACrD,MAAM,GAAG,GAAG,iBAAiB,CAAC,YAAY,CAAC,CAAC;IAC5C,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,MAAM,IAAI,KAAK,CACb,iHAAiH,CAClH,CAAC;IACJ,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Breaking change detection — oasdiff wrapper (client-side fallback)
|
|
3
|
+
* Server-side uses openapi-diff in Java
|
|
4
|
+
*/
|
|
5
|
+
export interface BreakingChange {
|
|
6
|
+
path: string;
|
|
7
|
+
method?: string;
|
|
8
|
+
change: string;
|
|
9
|
+
severity: "breaking" | "non-breaking";
|
|
10
|
+
}
|
|
11
|
+
export declare function detectBreakingChanges(_oldSpecPath: string, _newSpecPath: string): Promise<BreakingChange[]>;
|
|
12
|
+
//# sourceMappingURL=breaking-change.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"breaking-change.d.ts","sourceRoot":"","sources":["../../src/lib/breaking-change.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,UAAU,GAAG,cAAc,CAAC;CACvC;AAED,wBAAsB,qBAAqB,CACzC,YAAY,EAAE,MAAM,EACpB,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,cAAc,EAAE,CAAC,CAI3B"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Breaking change detection — oasdiff wrapper (client-side fallback)
|
|
3
|
+
* Server-side uses openapi-diff in Java
|
|
4
|
+
*/
|
|
5
|
+
export async function detectBreakingChanges(_oldSpecPath, _newSpecPath) {
|
|
6
|
+
// Client-side: would shell out to oasdiff or use npm oasdiff
|
|
7
|
+
// For scaffold, return empty
|
|
8
|
+
return [];
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=breaking-change.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"breaking-change.js","sourceRoot":"","sources":["../../src/lib/breaking-change.ts"],"names":[],"mappings":"AAAA;;;GAGG;AASH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,YAAoB,EACpB,YAAoB;IAEpB,6DAA6D;IAC7D,6BAA6B;IAC7B,OAAO,EAAE,CAAC;AACZ,CAAC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CI environment auto-detection + local git metadata
|
|
3
|
+
* Priority: CLI flags > PLATFORM_* env vars > .spec0.yaml > CI env > local git
|
|
4
|
+
*/
|
|
5
|
+
export interface CIDetectedContext {
|
|
6
|
+
name: string;
|
|
7
|
+
namespace: string;
|
|
8
|
+
owner: string;
|
|
9
|
+
gitSha: string;
|
|
10
|
+
branch: string;
|
|
11
|
+
githubRepo?: string;
|
|
12
|
+
}
|
|
13
|
+
export declare function detectCI(): CIDetectedContext | null;
|
|
14
|
+
/**
|
|
15
|
+
* Get the git commit SHA of the last commit that touched a specific file.
|
|
16
|
+
* Uses `git log -1 --format=%H -- <file>` so the SHA reflects when the spec
|
|
17
|
+
* actually changed, not just the HEAD commit.
|
|
18
|
+
*
|
|
19
|
+
* Returns null if not in a git repo or git is not available.
|
|
20
|
+
*/
|
|
21
|
+
export declare function getGitShaForFile(specFilePath: string): string | null;
|
|
22
|
+
/**
|
|
23
|
+
* Get the current HEAD commit SHA (repo-level, not file-specific).
|
|
24
|
+
* Falls back to getGitShaForFile when a spec path is available.
|
|
25
|
+
*/
|
|
26
|
+
export declare function getGitHeadSha(): string | null;
|
|
27
|
+
/**
|
|
28
|
+
* Get the current branch name.
|
|
29
|
+
*/
|
|
30
|
+
export declare function getGitBranch(): string | null;
|
|
31
|
+
export declare function getGitMetadata(): Partial<CIDetectedContext>;
|
|
32
|
+
export declare function hasPlatformEnv(): boolean;
|
|
33
|
+
//# sourceMappingURL=ci-detect.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ci-detect.d.ts","sourceRoot":"","sources":["../../src/lib/ci-detect.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,wBAAgB,QAAQ,IAAI,iBAAiB,GAAG,IAAI,CA8CnD;AAiBD;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAapE;AAED;;;GAGG;AACH,wBAAgB,aAAa,IAAI,MAAM,GAAG,IAAI,CAY7C;AAED;;GAEG;AACH,wBAAgB,YAAY,IAAI,MAAM,GAAG,IAAI,CAY5C;AAED,wBAAgB,cAAc,IAAI,OAAO,CAAC,iBAAiB,CAAC,CAE3D;AAED,wBAAgB,cAAc,IAAI,OAAO,CAIxC"}
|