aui-agent-builder 0.4.32 → 0.4.33
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/api-client/apollo-client.d.ts +55 -0
- package/dist/api-client/apollo-client.d.ts.map +1 -1
- package/dist/api-client/apollo-client.js +45 -2
- package/dist/api-client/apollo-client.js.map +1 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +46 -0
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/push.js +49 -0
- package/dist/commands/push.js.map +1 -1
- package/dist/commands/vault.d.ts +25 -0
- package/dist/commands/vault.d.ts.map +1 -0
- package/dist/commands/vault.js +220 -0
- package/dist/commands/vault.js.map +1 -0
- package/dist/index.js +85 -0
- package/dist/index.js.map +1 -1
- package/dist/services/integration.service.d.ts +1 -1
- package/dist/services/integration.service.d.ts.map +1 -1
- package/dist/services/integration.service.js +4 -2
- package/dist/services/integration.service.js.map +1 -1
- package/dist/services/kb-identity.d.ts +54 -0
- package/dist/services/kb-identity.d.ts.map +1 -0
- package/dist/services/kb-identity.js +152 -0
- package/dist/services/kb-identity.js.map +1 -0
- package/dist/services/kb-view.service.d.ts.map +1 -1
- package/dist/services/kb-view.service.js +14 -3
- package/dist/services/kb-view.service.js.map +1 -1
- package/dist/services/vault.service.d.ts +58 -0
- package/dist/services/vault.service.d.ts.map +1 -0
- package/dist/services/vault.service.js +143 -0
- package/dist/services/vault.service.js.map +1 -0
- package/dist/types/index.d.ts +1 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +1 -0
- package/dist/types/index.js.map +1 -1
- package/dist/types/vault.d.ts +31 -0
- package/dist/types/vault.d.ts.map +1 -0
- package/dist/types/vault.js +10 -0
- package/dist/types/vault.js.map +1 -0
- package/dist/ui/views/VaultView.d.ts +19 -0
- package/dist/ui/views/VaultView.d.ts.map +1 -0
- package/dist/ui/views/VaultView.js +35 -0
- package/dist/ui/views/VaultView.js.map +1 -0
- package/dist/utils/json-output.d.ts +11 -0
- package/dist/utils/json-output.d.ts.map +1 -1
- package/dist/utils/json-output.js +19 -1
- package/dist/utils/json-output.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Box, Text } from "ink";
|
|
3
|
+
import { Header, Section, StatusLine, KeyValueGroup, Divider, Hint, } from "../components/index.js";
|
|
4
|
+
import { colors } from "../theme.js";
|
|
5
|
+
/** Human-readable scope label, e.g. "NETWORK:6a39...". Never shows a value. */
|
|
6
|
+
export function scopeLabel(secret) {
|
|
7
|
+
const s = secret.scope || {};
|
|
8
|
+
const id = s?.network_id || s?.account_id || s?.organization_id || s?.network_category_id || "";
|
|
9
|
+
return id ? `${s?.type}:${id}` : String(s?.type ?? "");
|
|
10
|
+
}
|
|
11
|
+
/** Detail rows shared by `get` and `set` — metadata + masked preview only. */
|
|
12
|
+
function secretDetail(secret) {
|
|
13
|
+
return (_jsx(KeyValueGroup, { items: [
|
|
14
|
+
{ label: "Name", value: secret.name },
|
|
15
|
+
{ label: "Preview", value: secret.preview },
|
|
16
|
+
{ label: "Scope", value: scopeLabel(secret) },
|
|
17
|
+
{ label: "Version", value: String(secret.version) },
|
|
18
|
+
{ label: "Description", value: secret.description ?? undefined },
|
|
19
|
+
{ label: "Updated", value: secret.updated_at },
|
|
20
|
+
] }));
|
|
21
|
+
}
|
|
22
|
+
export function VaultListView({ secrets }) {
|
|
23
|
+
return (_jsxs(Box, { flexDirection: "column", paddingX: 1, paddingY: 1, children: [_jsx(Header, { title: "Vault Secrets" }), secrets.length === 0 ? (_jsx(Section, { title: "Secrets", children: _jsx(Hint, { message: "No secrets in this scope. Create one with", command: "aui vault set <NAME>" }) })) : (_jsx(Section, { title: `Secrets (${secrets.length})`, children: _jsxs(Box, { flexDirection: "column", children: [_jsxs(Box, { children: [_jsx(Box, { width: 28, children: _jsx(Text, { bold: true, children: "Name" }) }), _jsx(Box, { width: 16, children: _jsx(Text, { bold: true, children: "Preview" }) }), _jsx(Box, { width: 32, children: _jsx(Text, { bold: true, children: "Scope" }) }), _jsx(Box, { children: _jsx(Text, { bold: true, children: "Ver." }) })] }), _jsx(Divider, { width: 84 }), secrets.map((secret) => (_jsxs(Box, { children: [_jsx(Box, { width: 28, children: _jsx(Text, { color: colors.brand, children: secret.name }) }), _jsx(Box, { width: 16, children: _jsx(Text, { color: colors.muted, children: secret.preview }) }), _jsx(Box, { width: 32, children: _jsx(Text, { color: colors.muted, children: scopeLabel(secret) }) }), _jsx(Box, { children: _jsx(Text, { color: colors.muted, children: secret.version }) })] }, secret.id)))] }) }))] }));
|
|
24
|
+
}
|
|
25
|
+
export function VaultSecretView({ secret }) {
|
|
26
|
+
return (_jsxs(Box, { flexDirection: "column", paddingX: 1, paddingY: 1, children: [_jsx(Header, { title: "Vault Secret" }), _jsx(Section, { title: "Details", children: secretDetail(secret) })] }));
|
|
27
|
+
}
|
|
28
|
+
// ─── Saved (set) ───
|
|
29
|
+
export function VaultSecretSavedView({ secret }) {
|
|
30
|
+
return (_jsxs(Box, { flexDirection: "column", paddingX: 1, paddingY: 1, children: [_jsx(Header, { title: "Vault Secret" }), _jsx(StatusLine, { kind: "success", label: "Saved secret", value: secret.name }), _jsx(Box, { marginTop: 1, children: secretDetail(secret) }), _jsx(Box, { marginTop: 1, children: _jsx(Hint, { message: "Reference it in your integration config as", command: `{{vault.${secret.name}}}` }) })] }));
|
|
31
|
+
}
|
|
32
|
+
export function VaultSecretDeletedView({ name, message, }) {
|
|
33
|
+
return (_jsx(Box, { paddingX: 1, paddingY: 1, children: _jsx(StatusLine, { kind: "success", label: message, value: name }) }));
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=VaultView.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"VaultView.js","sourceRoot":"","sources":["../../../src/ui/views/VaultView.tsx"],"names":[],"mappings":"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"}
|
|
@@ -49,6 +49,17 @@ export type JsonEnvelope<T = unknown> = JsonSuccessEnvelope<T> | JsonErrorEnvelo
|
|
|
49
49
|
export declare function outputJson<T>(data: T): void;
|
|
50
50
|
/**
|
|
51
51
|
* Write an error JSON envelope to stdout and exit with the given code.
|
|
52
|
+
*
|
|
53
|
+
* Uses a synchronous fd-1 write (not `process.stdout.write`) on purpose:
|
|
54
|
+
* `process.stdout.write` to a pipe is async, and the immediately-following
|
|
55
|
+
* `process.exit` can terminate the process before the buffer flushes —
|
|
56
|
+
* silently dropping the error envelope for non-interactive callers (the BFF,
|
|
57
|
+
* Claude Code, the spawned-subprocess test harness). `fs.writeSync` blocks
|
|
58
|
+
* until the bytes are handed to the OS, so the payload always lands before we
|
|
59
|
+
* exit while keeping this function's synchronous `never` contract intact.
|
|
60
|
+
* Error envelopes are small (well under the pipe buffer) so this never blocks
|
|
61
|
+
* meaningfully or risks EAGAIN. Best-effort: if the fd write throws, fall back
|
|
62
|
+
* to the async write so we never crash on the error path itself.
|
|
52
63
|
*/
|
|
53
64
|
export declare function outputJsonError(detail: JsonErrorDetail, exitCode?: number): never;
|
|
54
65
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"json-output.d.ts","sourceRoot":"","sources":["../../src/utils/json-output.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;
|
|
1
|
+
{"version":3,"file":"json-output.d.ts","sourceRoot":"","sources":["../../src/utils/json-output.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAMH,wBAAgB,WAAW,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAElD;AAED,wBAAgB,UAAU,IAAI,OAAO,CAEpC;AAED;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,IAAI,OAAO,CAG9C;AAED,MAAM,WAAW,mBAAmB,CAAC,CAAC,GAAG,OAAO;IAC9C,OAAO,EAAE,IAAI,CAAC;IACd,IAAI,EAAE,CAAC,CAAC;CACT;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;;OAIG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,KAAK,CAAC;IACf,KAAK,EAAE,eAAe,CAAC;CACxB;AAED,MAAM,MAAM,YAAY,CAAC,CAAC,GAAG,OAAO,IAAI,mBAAmB,CAAC,CAAC,CAAC,GAAG,iBAAiB,CAAC;AAEnF;;GAEG;AACH,wBAAgB,UAAU,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,GAAG,IAAI,CAG3C;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,eAAe,EAAE,QAAQ,SAAI,GAAG,KAAK,CAS5E;AAED;;;GAGG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE/C"}
|
|
@@ -10,6 +10,7 @@
|
|
|
10
10
|
* - Progress messages (spinners, status) go to stderr
|
|
11
11
|
* - Ink rendering is skipped entirely
|
|
12
12
|
*/
|
|
13
|
+
import { writeSync } from "node:fs";
|
|
13
14
|
let _jsonMode = false;
|
|
14
15
|
export function setJsonMode(enabled) {
|
|
15
16
|
_jsonMode = enabled;
|
|
@@ -40,10 +41,27 @@ export function outputJson(data) {
|
|
|
40
41
|
}
|
|
41
42
|
/**
|
|
42
43
|
* Write an error JSON envelope to stdout and exit with the given code.
|
|
44
|
+
*
|
|
45
|
+
* Uses a synchronous fd-1 write (not `process.stdout.write`) on purpose:
|
|
46
|
+
* `process.stdout.write` to a pipe is async, and the immediately-following
|
|
47
|
+
* `process.exit` can terminate the process before the buffer flushes —
|
|
48
|
+
* silently dropping the error envelope for non-interactive callers (the BFF,
|
|
49
|
+
* Claude Code, the spawned-subprocess test harness). `fs.writeSync` blocks
|
|
50
|
+
* until the bytes are handed to the OS, so the payload always lands before we
|
|
51
|
+
* exit while keeping this function's synchronous `never` contract intact.
|
|
52
|
+
* Error envelopes are small (well under the pipe buffer) so this never blocks
|
|
53
|
+
* meaningfully or risks EAGAIN. Best-effort: if the fd write throws, fall back
|
|
54
|
+
* to the async write so we never crash on the error path itself.
|
|
43
55
|
*/
|
|
44
56
|
export function outputJsonError(detail, exitCode = 1) {
|
|
45
57
|
const envelope = { success: false, error: detail };
|
|
46
|
-
|
|
58
|
+
const payload = JSON.stringify(envelope, null, 2) + "\n";
|
|
59
|
+
try {
|
|
60
|
+
writeSync(1, payload);
|
|
61
|
+
}
|
|
62
|
+
catch {
|
|
63
|
+
process.stdout.write(payload);
|
|
64
|
+
}
|
|
47
65
|
process.exit(exitCode);
|
|
48
66
|
}
|
|
49
67
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"json-output.js","sourceRoot":"","sources":["../../src/utils/json-output.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,IAAI,SAAS,GAAG,KAAK,CAAC;AAEtB,MAAM,UAAU,WAAW,CAAC,OAAgB;IAC1C,SAAS,GAAG,OAAO,CAAC;AACtB,CAAC;AAED,MAAM,UAAU,UAAU;IACxB,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,oBAAoB;IAClC,IAAI,SAAS;QAAE,OAAO,KAAK,CAAC;IAC5B,OAAO,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACvE,CAAC;AA2BD;;GAEG;AACH,MAAM,UAAU,UAAU,CAAI,IAAO;IACnC,MAAM,QAAQ,GAA2B,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IACjE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;AACjE,CAAC;AAED
|
|
1
|
+
{"version":3,"file":"json-output.js","sourceRoot":"","sources":["../../src/utils/json-output.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAEpC,IAAI,SAAS,GAAG,KAAK,CAAC;AAEtB,MAAM,UAAU,WAAW,CAAC,OAAgB;IAC1C,SAAS,GAAG,OAAO,CAAC;AACtB,CAAC;AAED,MAAM,UAAU,UAAU;IACxB,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,oBAAoB;IAClC,IAAI,SAAS;QAAE,OAAO,KAAK,CAAC;IAC5B,OAAO,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACvE,CAAC;AA2BD;;GAEG;AACH,MAAM,UAAU,UAAU,CAAI,IAAO;IACnC,MAAM,QAAQ,GAA2B,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IACjE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;AACjE,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,eAAe,CAAC,MAAuB,EAAE,QAAQ,GAAG,CAAC;IACnE,MAAM,QAAQ,GAAsB,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;IACtE,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC;IACzD,IAAI,CAAC;QACH,SAAS,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IACxB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAChC,CAAC;IACD,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AACzB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,SAAS,CAAC,OAAe;IACvC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;AACvC,CAAC"}
|