@positronic/cli 0.0.56 → 0.0.58
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/src/cli.js +139 -0
- package/dist/src/commands/auth.js +111 -0
- package/dist/src/commands/helpers.js +68 -8
- package/dist/src/commands/project-config-manager.js +119 -0
- package/dist/src/commands/users.js +91 -0
- package/dist/src/components/agent-chat-view.js +125 -0
- package/dist/src/components/auth-format-jwk-key.js +457 -0
- package/dist/src/components/auth-list.js +56 -0
- package/dist/src/components/auth-login.js +209 -0
- package/dist/src/components/auth-logout.js +75 -0
- package/dist/src/components/auth-status.js +88 -0
- package/dist/src/components/brain-run.js +287 -254
- package/dist/src/components/brain-top-table.js +4 -0
- package/dist/src/components/event-detail.js +364 -0
- package/dist/src/components/events-view.js +221 -25
- package/dist/src/components/state-view.js +52 -0
- package/dist/src/components/top-navigator.js +80 -6
- package/dist/src/components/types.js +1 -0
- package/dist/src/components/users-create.js +293 -0
- package/dist/src/components/users-delete.js +294 -0
- package/dist/src/components/users-keys-add.js +156 -0
- package/dist/src/components/users-keys-list.js +119 -0
- package/dist/src/components/users-keys-remove.js +299 -0
- package/dist/src/components/users-list.js +109 -0
- package/dist/src/components/watch-keyboard.js +136 -0
- package/dist/src/components/watch-machine.js +573 -0
- package/dist/src/components/watch.js +357 -44
- package/dist/src/hooks/useApi.js +217 -45
- package/dist/src/lib/request-signer.js +208 -0
- package/dist/src/lib/ssh-key-utils.js +212 -0
- package/dist/src/utils/agent-utils.js +107 -0
- package/dist/types/cli.d.ts.map +1 -1
- package/dist/types/commands/auth.d.ts +44 -0
- package/dist/types/commands/auth.d.ts.map +1 -0
- package/dist/types/commands/helpers.d.ts +4 -0
- package/dist/types/commands/helpers.d.ts.map +1 -1
- package/dist/types/commands/project-config-manager.d.ts +43 -0
- package/dist/types/commands/project-config-manager.d.ts.map +1 -1
- package/dist/types/commands/users.d.ts +33 -0
- package/dist/types/commands/users.d.ts.map +1 -0
- package/dist/types/components/agent-chat-view.d.ts +12 -0
- package/dist/types/components/agent-chat-view.d.ts.map +1 -0
- package/dist/types/components/auth-format-jwk-key.d.ts +6 -0
- package/dist/types/components/auth-format-jwk-key.d.ts.map +1 -0
- package/dist/types/components/auth-list.d.ts +7 -0
- package/dist/types/components/auth-list.d.ts.map +1 -0
- package/dist/types/components/auth-login.d.ts +9 -0
- package/dist/types/components/auth-login.d.ts.map +1 -0
- package/dist/types/components/auth-logout.d.ts +8 -0
- package/dist/types/components/auth-logout.d.ts.map +1 -0
- package/dist/types/components/auth-status.d.ts +7 -0
- package/dist/types/components/auth-status.d.ts.map +1 -0
- package/dist/types/components/brain-run.d.ts +11 -1
- package/dist/types/components/brain-run.d.ts.map +1 -1
- package/dist/types/components/brain-top-table.d.ts.map +1 -1
- package/dist/types/components/event-detail.d.ts +10 -0
- package/dist/types/components/event-detail.d.ts.map +1 -0
- package/dist/types/components/events-view.d.ts +9 -7
- package/dist/types/components/events-view.d.ts.map +1 -1
- package/dist/types/components/state-view.d.ts +13 -0
- package/dist/types/components/state-view.d.ts.map +1 -0
- package/dist/types/components/top-navigator.d.ts.map +1 -1
- package/dist/types/components/types.d.ts +11 -0
- package/dist/types/components/types.d.ts.map +1 -0
- package/dist/types/components/users-create.d.ts +6 -0
- package/dist/types/components/users-create.d.ts.map +1 -0
- package/dist/types/components/users-delete.d.ts +7 -0
- package/dist/types/components/users-delete.d.ts.map +1 -0
- package/dist/types/components/users-keys-add.d.ts +8 -0
- package/dist/types/components/users-keys-add.d.ts.map +1 -0
- package/dist/types/components/users-keys-list.d.ts +6 -0
- package/dist/types/components/users-keys-list.d.ts.map +1 -0
- package/dist/types/components/users-keys-remove.d.ts +8 -0
- package/dist/types/components/users-keys-remove.d.ts.map +1 -0
- package/dist/types/components/users-list.d.ts +2 -0
- package/dist/types/components/users-list.d.ts.map +1 -0
- package/dist/types/components/watch-keyboard.d.ts +56 -0
- package/dist/types/components/watch-keyboard.d.ts.map +1 -0
- package/dist/types/components/watch-machine.d.ts +171 -0
- package/dist/types/components/watch-machine.d.ts.map +1 -0
- package/dist/types/components/watch.d.ts.map +1 -1
- package/dist/types/hooks/useApi.d.ts.map +1 -1
- package/dist/types/hooks/useBrainMachine.d.ts +9 -3
- package/dist/types/hooks/useBrainMachine.d.ts.map +1 -1
- package/dist/types/lib/request-signer.d.ts +51 -0
- package/dist/types/lib/request-signer.d.ts.map +1 -0
- package/dist/types/lib/ssh-key-utils.d.ts +45 -0
- package/dist/types/lib/ssh-key-utils.d.ts.map +1 -0
- package/dist/types/utils/agent-utils.d.ts +20 -0
- package/dist/types/utils/agent-utils.d.ts.map +1 -0
- package/package.json +7 -4
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
import sshpk from 'sshpk';
|
|
2
|
+
import { readFileSync, readdirSync, existsSync } from 'fs';
|
|
3
|
+
import { homedir } from 'os';
|
|
4
|
+
import { join } from 'path';
|
|
5
|
+
import { createPublicKey } from 'crypto';
|
|
6
|
+
/**
|
|
7
|
+
* Discover available SSH keys in the ~/.ssh directory
|
|
8
|
+
* Scans for common key files and returns metadata about each key
|
|
9
|
+
*/ export function discoverSSHKeys() {
|
|
10
|
+
var sshDir = join(homedir(), '.ssh');
|
|
11
|
+
if (!existsSync(sshDir)) {
|
|
12
|
+
return [];
|
|
13
|
+
}
|
|
14
|
+
var discoveredKeys = [];
|
|
15
|
+
var processedPaths = new Set();
|
|
16
|
+
// Common private key filenames to look for
|
|
17
|
+
var commonKeyNames = [
|
|
18
|
+
'id_rsa',
|
|
19
|
+
'id_ed25519',
|
|
20
|
+
'id_ecdsa',
|
|
21
|
+
'id_dsa'
|
|
22
|
+
];
|
|
23
|
+
var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
|
|
24
|
+
try {
|
|
25
|
+
// First, check common key names
|
|
26
|
+
for(var _iterator = commonKeyNames[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
|
|
27
|
+
var keyName = _step.value;
|
|
28
|
+
var privateKeyPath = join(sshDir, keyName);
|
|
29
|
+
var publicKeyPath = join(sshDir, "".concat(keyName, ".pub"));
|
|
30
|
+
if (existsSync(privateKeyPath) && !processedPaths.has(privateKeyPath)) {
|
|
31
|
+
var keyInfo = tryLoadKeyInfo(privateKeyPath, publicKeyPath);
|
|
32
|
+
if (keyInfo) {
|
|
33
|
+
discoveredKeys.push(keyInfo);
|
|
34
|
+
processedPaths.add(privateKeyPath);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
} catch (err) {
|
|
39
|
+
_didIteratorError = true;
|
|
40
|
+
_iteratorError = err;
|
|
41
|
+
} finally{
|
|
42
|
+
try {
|
|
43
|
+
if (!_iteratorNormalCompletion && _iterator.return != null) {
|
|
44
|
+
_iterator.return();
|
|
45
|
+
}
|
|
46
|
+
} finally{
|
|
47
|
+
if (_didIteratorError) {
|
|
48
|
+
throw _iteratorError;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
// Also scan for any .pub files and infer private key path
|
|
53
|
+
try {
|
|
54
|
+
var files = readdirSync(sshDir);
|
|
55
|
+
var _iteratorNormalCompletion1 = true, _didIteratorError1 = false, _iteratorError1 = undefined;
|
|
56
|
+
try {
|
|
57
|
+
for(var _iterator1 = files[Symbol.iterator](), _step1; !(_iteratorNormalCompletion1 = (_step1 = _iterator1.next()).done); _iteratorNormalCompletion1 = true){
|
|
58
|
+
var file = _step1.value;
|
|
59
|
+
if (file.endsWith('.pub')) {
|
|
60
|
+
var privateKeyName = file.slice(0, -4); // Remove .pub
|
|
61
|
+
var privateKeyPath1 = join(sshDir, privateKeyName);
|
|
62
|
+
var publicKeyPath1 = join(sshDir, file);
|
|
63
|
+
if (existsSync(privateKeyPath1) && !processedPaths.has(privateKeyPath1)) {
|
|
64
|
+
var keyInfo1 = tryLoadKeyInfo(privateKeyPath1, publicKeyPath1);
|
|
65
|
+
if (keyInfo1) {
|
|
66
|
+
discoveredKeys.push(keyInfo1);
|
|
67
|
+
processedPaths.add(privateKeyPath1);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
} catch (err) {
|
|
73
|
+
_didIteratorError1 = true;
|
|
74
|
+
_iteratorError1 = err;
|
|
75
|
+
} finally{
|
|
76
|
+
try {
|
|
77
|
+
if (!_iteratorNormalCompletion1 && _iterator1.return != null) {
|
|
78
|
+
_iterator1.return();
|
|
79
|
+
}
|
|
80
|
+
} finally{
|
|
81
|
+
if (_didIteratorError1) {
|
|
82
|
+
throw _iteratorError1;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
} catch (e) {
|
|
87
|
+
// If we can't read the directory, just return what we have
|
|
88
|
+
}
|
|
89
|
+
return discoveredKeys;
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Try to load key info from a private/public key pair
|
|
93
|
+
*/ function tryLoadKeyInfo(privateKeyPath, publicKeyPath) {
|
|
94
|
+
try {
|
|
95
|
+
// Try to read the public key to get fingerprint and algorithm
|
|
96
|
+
if (existsSync(publicKeyPath)) {
|
|
97
|
+
var pubContent = readFileSync(publicKeyPath, 'utf-8').trim();
|
|
98
|
+
var sshKey = sshpk.parseKey(pubContent, 'auto');
|
|
99
|
+
var fingerprint = sshKey.fingerprint('sha256').toString();
|
|
100
|
+
// Extract comment from public key (usually the third part after algorithm and key data)
|
|
101
|
+
var parts = pubContent.split(' ');
|
|
102
|
+
var comment = parts.length > 2 ? parts.slice(2).join(' ') : undefined;
|
|
103
|
+
return {
|
|
104
|
+
path: privateKeyPath,
|
|
105
|
+
fingerprint: fingerprint,
|
|
106
|
+
algorithm: sshKey.type.toUpperCase(),
|
|
107
|
+
comment: comment
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
// If no public key, try to derive info from private key
|
|
111
|
+
var privateContent = readFileSync(privateKeyPath, 'utf-8');
|
|
112
|
+
var privateKey = sshpk.parsePrivateKey(privateContent, 'auto');
|
|
113
|
+
var publicKey = privateKey.toPublic();
|
|
114
|
+
var fingerprint1 = publicKey.fingerprint('sha256').toString();
|
|
115
|
+
return {
|
|
116
|
+
path: privateKeyPath,
|
|
117
|
+
fingerprint: fingerprint1,
|
|
118
|
+
algorithm: privateKey.type.toUpperCase()
|
|
119
|
+
};
|
|
120
|
+
} catch (e) {
|
|
121
|
+
// Key couldn't be parsed, skip it
|
|
122
|
+
return null;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Convert an SSH public key file to JWK format
|
|
127
|
+
* Uses sshpk for SSH parsing and Node.js crypto for PEM → JWK conversion
|
|
128
|
+
*/ export function convertSSHPubKeyToJWK(pubKeyPath) {
|
|
129
|
+
var content = readFileSync(pubKeyPath, 'utf-8').trim();
|
|
130
|
+
var sshKey = sshpk.parseKey(content, 'auto');
|
|
131
|
+
// Get the fingerprint using SHA256 (sshpk's job)
|
|
132
|
+
var fingerprint = sshKey.fingerprint('sha256').toString();
|
|
133
|
+
// Convert SSH → PEM → JWK using Node.js crypto (battle-tested)
|
|
134
|
+
var pem = sshKey.toString('pem');
|
|
135
|
+
var keyObject = createPublicKey(pem);
|
|
136
|
+
var jwk = keyObject.export({
|
|
137
|
+
format: 'jwk'
|
|
138
|
+
});
|
|
139
|
+
return {
|
|
140
|
+
jwk: jwk,
|
|
141
|
+
fingerprint: fingerprint,
|
|
142
|
+
algorithm: sshKey.type
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Load an SSH private key from a file path or environment variable
|
|
147
|
+
*/ export function loadPrivateKey(pathOrEnv) {
|
|
148
|
+
var keyPath;
|
|
149
|
+
if (pathOrEnv) {
|
|
150
|
+
// If it starts with ~ or /, treat as a path
|
|
151
|
+
if (pathOrEnv.startsWith('~') || pathOrEnv.startsWith('/')) {
|
|
152
|
+
keyPath = pathOrEnv.startsWith('~') ? join(homedir(), pathOrEnv.slice(1)) : pathOrEnv;
|
|
153
|
+
} else {
|
|
154
|
+
// Otherwise, check if it's an env var or direct path
|
|
155
|
+
keyPath = pathOrEnv;
|
|
156
|
+
}
|
|
157
|
+
} else {
|
|
158
|
+
// Default to ~/.ssh/id_rsa
|
|
159
|
+
keyPath = join(homedir(), '.ssh', 'id_rsa');
|
|
160
|
+
}
|
|
161
|
+
// Expand ~ if present
|
|
162
|
+
if (keyPath.startsWith('~')) {
|
|
163
|
+
keyPath = join(homedir(), keyPath.slice(1));
|
|
164
|
+
}
|
|
165
|
+
var content = readFileSync(keyPath, 'utf-8');
|
|
166
|
+
return sshpk.parsePrivateKey(content, 'auto');
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* Get the fingerprint of a private key (from its public component)
|
|
170
|
+
*/ export function getPrivateKeyFingerprint(privateKey) {
|
|
171
|
+
var publicKey = privateKey.toPublic();
|
|
172
|
+
return publicKey.fingerprint('sha256').toString();
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* Sign data with an SSH private key
|
|
176
|
+
*/ export function signWithPrivateKey(privateKey, data) {
|
|
177
|
+
var dataBuffer = typeof data === 'string' ? Buffer.from(data) : data;
|
|
178
|
+
var signer = privateKey.createSign('sha256');
|
|
179
|
+
signer.update(dataBuffer);
|
|
180
|
+
var signature = signer.sign();
|
|
181
|
+
return signature.toBuffer('raw');
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* Resolve the private key path from environment, config, or default
|
|
185
|
+
* @param configuredPath - Optional configured path from ProjectConfigManager
|
|
186
|
+
*/ export function resolvePrivateKeyPath(configuredPath) {
|
|
187
|
+
// Priority 1: Environment variable (highest)
|
|
188
|
+
var envPath = process.env.POSITRONIC_PRIVATE_KEY;
|
|
189
|
+
if (envPath) {
|
|
190
|
+
if (envPath.startsWith('~')) {
|
|
191
|
+
return join(homedir(), envPath.slice(1));
|
|
192
|
+
}
|
|
193
|
+
return envPath;
|
|
194
|
+
}
|
|
195
|
+
// Priority 2: Configured path from config manager
|
|
196
|
+
if (configuredPath) {
|
|
197
|
+
if (configuredPath.startsWith('~')) {
|
|
198
|
+
return join(homedir(), configuredPath.slice(1));
|
|
199
|
+
}
|
|
200
|
+
return configuredPath;
|
|
201
|
+
}
|
|
202
|
+
// Priority 3: Default fallback
|
|
203
|
+
return join(homedir(), '.ssh', 'id_rsa');
|
|
204
|
+
}
|
|
205
|
+
/**
|
|
206
|
+
* Expand a path that may contain ~ to the full path
|
|
207
|
+
*/ export function expandPath(keyPath) {
|
|
208
|
+
if (keyPath.startsWith('~')) {
|
|
209
|
+
return join(homedir(), keyPath.slice(1));
|
|
210
|
+
}
|
|
211
|
+
return keyPath;
|
|
212
|
+
}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
function _array_like_to_array(arr, len) {
|
|
2
|
+
if (len == null || len > arr.length) len = arr.length;
|
|
3
|
+
for(var i = 0, arr2 = new Array(len); i < len; i++)arr2[i] = arr[i];
|
|
4
|
+
return arr2;
|
|
5
|
+
}
|
|
6
|
+
function _array_with_holes(arr) {
|
|
7
|
+
if (Array.isArray(arr)) return arr;
|
|
8
|
+
}
|
|
9
|
+
function _iterable_to_array_limit(arr, i) {
|
|
10
|
+
var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"];
|
|
11
|
+
if (_i == null) return;
|
|
12
|
+
var _arr = [];
|
|
13
|
+
var _n = true;
|
|
14
|
+
var _d = false;
|
|
15
|
+
var _s, _e;
|
|
16
|
+
try {
|
|
17
|
+
for(_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true){
|
|
18
|
+
_arr.push(_s.value);
|
|
19
|
+
if (i && _arr.length === i) break;
|
|
20
|
+
}
|
|
21
|
+
} catch (err) {
|
|
22
|
+
_d = true;
|
|
23
|
+
_e = err;
|
|
24
|
+
} finally{
|
|
25
|
+
try {
|
|
26
|
+
if (!_n && _i["return"] != null) _i["return"]();
|
|
27
|
+
} finally{
|
|
28
|
+
if (_d) throw _e;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
return _arr;
|
|
32
|
+
}
|
|
33
|
+
function _non_iterable_rest() {
|
|
34
|
+
throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
|
|
35
|
+
}
|
|
36
|
+
function _sliced_to_array(arr, i) {
|
|
37
|
+
return _array_with_holes(arr) || _iterable_to_array_limit(arr, i) || _unsupported_iterable_to_array(arr, i) || _non_iterable_rest();
|
|
38
|
+
}
|
|
39
|
+
function _unsupported_iterable_to_array(o, minLen) {
|
|
40
|
+
if (!o) return;
|
|
41
|
+
if (typeof o === "string") return _array_like_to_array(o, minLen);
|
|
42
|
+
var n = Object.prototype.toString.call(o).slice(8, -1);
|
|
43
|
+
if (n === "Object" && o.constructor) n = o.constructor.name;
|
|
44
|
+
if (n === "Map" || n === "Set") return Array.from(n);
|
|
45
|
+
if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _array_like_to_array(o, minLen);
|
|
46
|
+
}
|
|
47
|
+
import { BRAIN_EVENTS } from '@positronic/core';
|
|
48
|
+
/**
|
|
49
|
+
* Get display label for an agent.
|
|
50
|
+
* If stepTitle is 'main' (brain-level agent), use brainTitle instead.
|
|
51
|
+
*/ export function getAgentLabel(stepTitle, brainTitle) {
|
|
52
|
+
if (stepTitle === 'main' && brainTitle) {
|
|
53
|
+
return brainTitle;
|
|
54
|
+
}
|
|
55
|
+
return stepTitle;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Extract all unique agent loops from events.
|
|
59
|
+
* Groups by stepId to handle multiple agents.
|
|
60
|
+
*/ export function getAgentLoops(events, brainTitle) {
|
|
61
|
+
var agentMap = new Map();
|
|
62
|
+
var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
|
|
63
|
+
try {
|
|
64
|
+
for(var _iterator = events[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
|
|
65
|
+
var event = _step.value.event;
|
|
66
|
+
if (event.type === BRAIN_EVENTS.AGENT_START) {
|
|
67
|
+
var agentStart = event;
|
|
68
|
+
var existing = agentMap.get(agentStart.stepId);
|
|
69
|
+
if (!existing) {
|
|
70
|
+
agentMap.set(agentStart.stepId, {
|
|
71
|
+
startEvent: agentStart,
|
|
72
|
+
rawResponseEvents: []
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
} else if (event.type === BRAIN_EVENTS.AGENT_RAW_RESPONSE_MESSAGE) {
|
|
76
|
+
var rawResponse = event;
|
|
77
|
+
var existing1 = agentMap.get(rawResponse.stepId);
|
|
78
|
+
if (existing1) {
|
|
79
|
+
existing1.rawResponseEvents.push(rawResponse);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
} catch (err) {
|
|
84
|
+
_didIteratorError = true;
|
|
85
|
+
_iteratorError = err;
|
|
86
|
+
} finally{
|
|
87
|
+
try {
|
|
88
|
+
if (!_iteratorNormalCompletion && _iterator.return != null) {
|
|
89
|
+
_iterator.return();
|
|
90
|
+
}
|
|
91
|
+
} finally{
|
|
92
|
+
if (_didIteratorError) {
|
|
93
|
+
throw _iteratorError;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
return Array.from(agentMap.entries()).map(function(param) {
|
|
98
|
+
var _param = _sliced_to_array(param, 2), stepId = _param[0], _param_ = _param[1], startEvent = _param_.startEvent, rawResponseEvents = _param_.rawResponseEvents;
|
|
99
|
+
return {
|
|
100
|
+
stepId: stepId,
|
|
101
|
+
stepTitle: startEvent.stepTitle,
|
|
102
|
+
label: getAgentLabel(startEvent.stepTitle, brainTitle),
|
|
103
|
+
startEvent: startEvent,
|
|
104
|
+
rawResponseEvents: rawResponseEvents
|
|
105
|
+
};
|
|
106
|
+
});
|
|
107
|
+
}
|
package/dist/types/cli.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAC;AAU1B,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAK5D,MAAM,WAAW,UAAU;IACzB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,MAAM,CAAC,EAAE,mBAAmB,CAAC;IAC7B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,MAAM,EAAE,CAAC,OAAO,EAAE,KAAK,CAAC,YAAY,KAAK,GAAG,CAAC;CAC9C;AAoBD,wBAAgB,QAAQ,CAAC,OAAO,EAAE,UAAU,4BAu5C3C"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import type { ArgumentsCamelCase } from 'yargs';
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import { ProjectConfigManager } from './project-config-manager.js';
|
|
4
|
+
interface LoginArgs {
|
|
5
|
+
path?: string;
|
|
6
|
+
project?: boolean;
|
|
7
|
+
}
|
|
8
|
+
interface LogoutArgs {
|
|
9
|
+
project?: boolean;
|
|
10
|
+
}
|
|
11
|
+
interface FormatJwkKeyArgs {
|
|
12
|
+
pubkey?: string;
|
|
13
|
+
}
|
|
14
|
+
export declare class AuthCommand {
|
|
15
|
+
private configManager;
|
|
16
|
+
constructor(configManager?: ProjectConfigManager);
|
|
17
|
+
/**
|
|
18
|
+
* Handles the 'px auth' or 'px auth status' command.
|
|
19
|
+
* Shows current auth configuration.
|
|
20
|
+
*/
|
|
21
|
+
status(): React.ReactElement;
|
|
22
|
+
/**
|
|
23
|
+
* Handles the 'px auth login' command.
|
|
24
|
+
* Configure SSH key for authentication.
|
|
25
|
+
*/
|
|
26
|
+
login({ path, project }: ArgumentsCamelCase<LoginArgs>): React.ReactElement;
|
|
27
|
+
/**
|
|
28
|
+
* Handles the 'px auth logout' command.
|
|
29
|
+
* Clear SSH key configuration.
|
|
30
|
+
*/
|
|
31
|
+
logout({ project }: ArgumentsCamelCase<LogoutArgs>): React.ReactElement;
|
|
32
|
+
/**
|
|
33
|
+
* Handles the 'px auth list' command.
|
|
34
|
+
* List available SSH keys.
|
|
35
|
+
*/
|
|
36
|
+
list(): React.ReactElement;
|
|
37
|
+
/**
|
|
38
|
+
* Handles the 'px auth format-jwk-key' command.
|
|
39
|
+
* Convert an SSH public key to JWK format for ROOT_PUBLIC_KEY configuration.
|
|
40
|
+
*/
|
|
41
|
+
formatJwkKey({ pubkey }: ArgumentsCamelCase<FormatJwkKeyArgs>): React.ReactElement;
|
|
42
|
+
}
|
|
43
|
+
export {};
|
|
44
|
+
//# sourceMappingURL=auth.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../../src/commands/auth.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,OAAO,CAAC;AAChD,OAAO,KAAK,MAAM,OAAO,CAAC;AAM1B,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAEnE,UAAU,SAAS;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,UAAU,UAAU;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,UAAU,gBAAgB;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,qBAAa,WAAW;IACtB,OAAO,CAAC,aAAa,CAAuB;gBAEhC,aAAa,CAAC,EAAE,oBAAoB;IAIhD;;;OAGG;IACH,MAAM,IAAI,KAAK,CAAC,YAAY;IAM5B;;;OAGG;IACH,KAAK,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,kBAAkB,CAAC,SAAS,CAAC,GAAG,KAAK,CAAC,YAAY;IAQ3E;;;OAGG;IACH,MAAM,CAAC,EAAE,OAAO,EAAE,EAAE,kBAAkB,CAAC,UAAU,CAAC,GAAG,KAAK,CAAC,YAAY;IAOvE;;;OAGG;IACH,IAAI,IAAI,KAAK,CAAC,YAAY;IAM1B;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,EAAE,EAAE,kBAAkB,CAAC,gBAAgB,CAAC,GAAG,KAAK,CAAC,YAAY;CAKnF"}
|
|
@@ -24,6 +24,10 @@ export declare function isApiLocalDevMode(): boolean;
|
|
|
24
24
|
export declare function getApiBaseUrl(): string;
|
|
25
25
|
export declare const apiClient: {
|
|
26
26
|
fetch: (apiPath: string, options?: RequestInit) => Promise<Response>;
|
|
27
|
+
/**
|
|
28
|
+
* Fetch without authentication - used for unauthenticated endpoints like /auth/setup
|
|
29
|
+
*/
|
|
30
|
+
fetchUnauthenticated: (apiPath: string, options?: RequestInit) => Promise<Response>;
|
|
27
31
|
};
|
|
28
32
|
export declare function generateProject(projectName: string, projectDir: string): Promise<void>;
|
|
29
33
|
export declare function scanLocalResources(resourcesDir: string): ResourceEntry[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../../src/commands/helpers.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../../src/commands/helpers.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAUtD,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,MAAM,gBAAgB,GAAG,CAAC,QAAQ,EAAE,YAAY,KAAK,IAAI,CAAC;AAGhE,MAAM,MAAM,SAAS,GAAG,OAAO,SAAS,CAAC;AAMzC;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,GAAE,OAAc,GAAG,IAAI,CAGtF;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,OAAO,CAE3C;AAED;;;GAGG;AACH,wBAAgB,aAAa,IAAI,MAAM,CAOtC;AAGD,eAAO,MAAM,SAAS;qBACG,MAAM,YAAY,WAAW,KAAG,OAAO,CAAC,QAAQ,CAAC;IAiDxE;;OAEG;oCACmC,MAAM,YAAY,WAAW,KAAG,OAAO,CAAC,QAAQ,CAAC;CAkBxF,CAAC;AAEF,wBAAsB,eAAe,CAAC,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,iBAsF5E;AAED,wBAAgB,kBAAkB,CAAC,YAAY,EAAE,MAAM,GAAG,aAAa,EAAE,CAsCxE;AAeD,UAAU,UAAU;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAClD;AAED,MAAM,MAAM,oBAAoB,GAAG,CAAC,QAAQ,EAAE;IAC5C,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,UAAU,GAAG,WAAW,GAAG,UAAU,CAAC;IAC9C,KAAK,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;CAC5B,KAAK,IAAI,CAAC;AAEX;;GAEG;AACH,wBAAsB,aAAa,CACjC,eAAe,EAAE,MAAM,EACvB,MAAM,GAAE,SAAqB,EAC7B,UAAU,CAAC,EAAE,oBAAoB,GAChC,OAAO,CAAC,UAAU,CAAC,CA+KrB;AAqKD;;GAEG;AACH,wBAAsB,aAAa,CACjC,eAAe,EAAE,MAAM,EACvB,MAAM,GAAE,SAAqB,mBAoB9B;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,eAAe,EAAE,MAAM,GAAG,MAAM,CAwCnE;AAED;;GAEG;AACH,wBAAgB,2BAA2B,CAAC,eAAe,EAAE,MAAM,GAAG,MAAM,CAO3E;AAsCD;;GAEG;AACH,wBAAsB,cAAc,CAClC,IAAI,CAAC,EAAE,MAAM,EACb,SAAS,SAAO,GACf,OAAO,CAAC,OAAO,CAAC,CAsBlB;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,0BAA0B,CAC9C,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,MAAM,GAAE,SAAqB,EAC7B,UAAU,CAAC,EAAE,gBAAgB,EAC7B,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,IAAI,CAAC,CA2If"}
|
|
@@ -2,11 +2,13 @@ export interface Project {
|
|
|
2
2
|
name: string;
|
|
3
3
|
url: string;
|
|
4
4
|
addedAt: string;
|
|
5
|
+
privateKeyPath?: string;
|
|
5
6
|
}
|
|
6
7
|
export interface ProjectConfig {
|
|
7
8
|
version: string;
|
|
8
9
|
currentProject: string | null;
|
|
9
10
|
projects: Project[];
|
|
11
|
+
defaultPrivateKeyPath?: string;
|
|
10
12
|
}
|
|
11
13
|
export declare class ProjectConfigManager {
|
|
12
14
|
private configPath;
|
|
@@ -33,5 +35,46 @@ export declare class ProjectConfigManager {
|
|
|
33
35
|
projects: Project[];
|
|
34
36
|
current: string | null;
|
|
35
37
|
};
|
|
38
|
+
/**
|
|
39
|
+
* Get the resolved private key path following the priority order:
|
|
40
|
+
* 1. POSITRONIC_PRIVATE_KEY environment variable (highest)
|
|
41
|
+
* 2. Project-specific privateKeyPath (if project selected and has override)
|
|
42
|
+
* 3. Global defaultPrivateKeyPath from config
|
|
43
|
+
* 4. ~/.ssh/id_rsa fallback (lowest)
|
|
44
|
+
*/
|
|
45
|
+
getPrivateKeyPath(): string | null;
|
|
46
|
+
/**
|
|
47
|
+
* Set the global default private key path
|
|
48
|
+
*/
|
|
49
|
+
setDefaultPrivateKeyPath(keyPath: string): {
|
|
50
|
+
success: boolean;
|
|
51
|
+
error?: string;
|
|
52
|
+
};
|
|
53
|
+
/**
|
|
54
|
+
* Set the private key path for a specific project
|
|
55
|
+
*/
|
|
56
|
+
setProjectPrivateKeyPath(projectName: string, keyPath: string): {
|
|
57
|
+
success: boolean;
|
|
58
|
+
error?: string;
|
|
59
|
+
};
|
|
60
|
+
/**
|
|
61
|
+
* Clear the global default private key path
|
|
62
|
+
*/
|
|
63
|
+
clearDefaultPrivateKeyPath(): void;
|
|
64
|
+
/**
|
|
65
|
+
* Clear the private key path for a specific project
|
|
66
|
+
*/
|
|
67
|
+
clearProjectPrivateKeyPath(projectName: string): {
|
|
68
|
+
success: boolean;
|
|
69
|
+
error?: string;
|
|
70
|
+
};
|
|
71
|
+
/**
|
|
72
|
+
* Get the default private key path (global config only, no env var or project override)
|
|
73
|
+
*/
|
|
74
|
+
getDefaultPrivateKeyPath(): string | undefined;
|
|
75
|
+
/**
|
|
76
|
+
* Get the private key path for a specific project
|
|
77
|
+
*/
|
|
78
|
+
getProjectPrivateKeyPath(projectName: string): string | undefined;
|
|
36
79
|
}
|
|
37
80
|
//# sourceMappingURL=project-config-manager.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"project-config-manager.d.ts","sourceRoot":"","sources":["../../../src/commands/project-config-manager.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"project-config-manager.d.ts","sourceRoot":"","sources":["../../../src/commands/project-config-manager.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,qBAAqB,CAAC,EAAE,MAAM,CAAC;CAChC;AAED,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,SAAS,CAAS;gBAEd,eAAe,CAAC,EAAE,MAAM;IASpC,OAAO,CAAC,eAAe;IAMvB,OAAO,CAAC,gBAAgB;IAQxB,IAAI,IAAI,aAAa;IAmBrB,KAAK,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI;IAKlC,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE;IAmC3E,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE;IAajE,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE;IAoBjE,iBAAiB,IAAI,OAAO,GAAG,IAAI;IASnC,YAAY,IAAI;QAAE,QAAQ,EAAE,OAAO,EAAE,CAAC;QAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE;IAQ/D;;;;;;OAMG;IACH,iBAAiB,IAAI,MAAM,GAAG,IAAI;IAyBlC;;OAEG;IACH,wBAAwB,CAAC,OAAO,EAAE,MAAM,GAAG;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE;IAO/E;;OAEG;IACH,wBAAwB,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE;IAapG;;OAEG;IACH,0BAA0B,IAAI,IAAI;IAMlC;;OAEG;IACH,0BAA0B,CAAC,WAAW,EAAE,MAAM,GAAG;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE;IAarF;;OAEG;IACH,wBAAwB,IAAI,MAAM,GAAG,SAAS;IAK9C;;OAEG;IACH,wBAAwB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;CAKlE"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type { ArgumentsCamelCase } from 'yargs';
|
|
2
|
+
import React from 'react';
|
|
3
|
+
interface UsersCreateArgs {
|
|
4
|
+
name: string;
|
|
5
|
+
}
|
|
6
|
+
interface UsersDeleteArgs {
|
|
7
|
+
id: string;
|
|
8
|
+
force: boolean;
|
|
9
|
+
}
|
|
10
|
+
interface UsersKeysListArgs {
|
|
11
|
+
id: string;
|
|
12
|
+
}
|
|
13
|
+
interface UsersKeysAddArgs {
|
|
14
|
+
id: string;
|
|
15
|
+
pubkeyPath: string;
|
|
16
|
+
label?: string;
|
|
17
|
+
}
|
|
18
|
+
interface UsersKeysRemoveArgs {
|
|
19
|
+
id: string;
|
|
20
|
+
fingerprint: string;
|
|
21
|
+
force: boolean;
|
|
22
|
+
}
|
|
23
|
+
export declare class UsersCommand {
|
|
24
|
+
constructor();
|
|
25
|
+
list(): React.ReactElement;
|
|
26
|
+
create({ name }: ArgumentsCamelCase<UsersCreateArgs>): React.ReactElement;
|
|
27
|
+
delete({ id, force }: ArgumentsCamelCase<UsersDeleteArgs>): React.ReactElement;
|
|
28
|
+
keysList({ id }: ArgumentsCamelCase<UsersKeysListArgs>): React.ReactElement;
|
|
29
|
+
keysAdd({ id, pubkeyPath, label, }: ArgumentsCamelCase<UsersKeysAddArgs>): React.ReactElement;
|
|
30
|
+
keysRemove({ id, fingerprint, force, }: ArgumentsCamelCase<UsersKeysRemoveArgs>): React.ReactElement;
|
|
31
|
+
}
|
|
32
|
+
export {};
|
|
33
|
+
//# sourceMappingURL=users.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"users.d.ts","sourceRoot":"","sources":["../../../src/commands/users.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,OAAO,CAAC;AAChD,OAAO,KAAK,MAAM,OAAO,CAAC;AAQ1B,UAAU,eAAe;IACvB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,UAAU,eAAe;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,UAAU,iBAAiB;IACzB,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,UAAU,gBAAgB;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,UAAU,mBAAmB;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,qBAAa,YAAY;;IAGvB,IAAI,IAAI,KAAK,CAAC,YAAY;IAI1B,MAAM,CAAC,EAAE,IAAI,EAAE,EAAE,kBAAkB,CAAC,eAAe,CAAC,GAAG,KAAK,CAAC,YAAY;IAIzE,MAAM,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,kBAAkB,CAAC,eAAe,CAAC,GAAG,KAAK,CAAC,YAAY;IAI9E,QAAQ,CAAC,EAAE,EAAE,EAAE,EAAE,kBAAkB,CAAC,iBAAiB,CAAC,GAAG,KAAK,CAAC,YAAY;IAI3E,OAAO,CAAC,EACN,EAAE,EACF,UAAU,EACV,KAAK,GACN,EAAE,kBAAkB,CAAC,gBAAgB,CAAC,GAAG,KAAK,CAAC,YAAY;IAQ5D,UAAU,CAAC,EACT,EAAE,EACF,WAAW,EACX,KAAK,GACN,EAAE,kBAAkB,CAAC,mBAAmB,CAAC,GAAG,KAAK,CAAC,YAAY;CAOhE"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { AgentStartEvent, AgentRawResponseMessageEvent } from '@positronic/core';
|
|
2
|
+
interface AgentChatViewProps {
|
|
3
|
+
label: string;
|
|
4
|
+
agentStartEvent: AgentStartEvent;
|
|
5
|
+
rawResponseEvents: AgentRawResponseMessageEvent[];
|
|
6
|
+
scrollOffset: number;
|
|
7
|
+
onScrollChange: (offset: number) => void;
|
|
8
|
+
isActive?: boolean;
|
|
9
|
+
}
|
|
10
|
+
export declare const AgentChatView: ({ label, agentStartEvent, rawResponseEvents, scrollOffset, onScrollChange, isActive, }: AgentChatViewProps) => import("react/jsx-runtime").JSX.Element;
|
|
11
|
+
export {};
|
|
12
|
+
//# sourceMappingURL=agent-chat-view.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-chat-view.d.ts","sourceRoot":"","sources":["../../../src/components/agent-chat-view.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,eAAe,EACf,4BAA4B,EAC7B,MAAM,kBAAkB,CAAC;AAE1B,UAAU,kBAAkB;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,eAAe,EAAE,eAAe,CAAC;IACjC,iBAAiB,EAAE,4BAA4B,EAAE,CAAC;IAClD,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,eAAO,MAAM,aAAa,GAAI,wFAO3B,kBAAkB,4CAkGpB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth-format-jwk-key.d.ts","sourceRoot":"","sources":["../../../src/components/auth-format-jwk-key.tsx"],"names":[],"mappings":"AAQA,UAAU,qBAAqB;IAC7B,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAoED,eAAO,MAAM,gBAAgB,GAAI,gBAAgB,qBAAqB,mDAgJrE,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { ProjectConfigManager } from '../commands/project-config-manager.js';
|
|
2
|
+
interface AuthListProps {
|
|
3
|
+
configManager: ProjectConfigManager;
|
|
4
|
+
}
|
|
5
|
+
export declare const AuthList: ({ configManager }: AuthListProps) => import("react/jsx-runtime").JSX.Element;
|
|
6
|
+
export {};
|
|
7
|
+
//# sourceMappingURL=auth-list.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth-list.d.ts","sourceRoot":"","sources":["../../../src/components/auth-list.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,uCAAuC,CAAC;AAGlF,UAAU,aAAa;IACrB,aAAa,EAAE,oBAAoB,CAAC;CACrC;AAED,eAAO,MAAM,QAAQ,GAAI,mBAAmB,aAAa,4CAgExD,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { ProjectConfigManager } from '../commands/project-config-manager.js';
|
|
2
|
+
interface AuthLoginProps {
|
|
3
|
+
configManager: ProjectConfigManager;
|
|
4
|
+
keyPath?: string;
|
|
5
|
+
forProject: boolean;
|
|
6
|
+
}
|
|
7
|
+
export declare const AuthLogin: ({ configManager, keyPath, forProject }: AuthLoginProps) => import("react/jsx-runtime").JSX.Element | null;
|
|
8
|
+
export {};
|
|
9
|
+
//# sourceMappingURL=auth-login.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth-login.d.ts","sourceRoot":"","sources":["../../../src/components/auth-login.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,uCAAuC,CAAC;AAMlF,UAAU,cAAc;IACtB,aAAa,EAAE,oBAAoB,CAAC;IACpC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,OAAO,CAAC;CACrB;AAID,eAAO,MAAM,SAAS,GAAI,wCAAwC,cAAc,mDAyK/E,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { ProjectConfigManager } from '../commands/project-config-manager.js';
|
|
2
|
+
interface AuthLogoutProps {
|
|
3
|
+
configManager: ProjectConfigManager;
|
|
4
|
+
forProject: boolean;
|
|
5
|
+
}
|
|
6
|
+
export declare const AuthLogout: ({ configManager, forProject }: AuthLogoutProps) => import("react/jsx-runtime").JSX.Element;
|
|
7
|
+
export {};
|
|
8
|
+
//# sourceMappingURL=auth-logout.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth-logout.d.ts","sourceRoot":"","sources":["../../../src/components/auth-logout.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,uCAAuC,CAAC;AAGlF,UAAU,eAAe;IACvB,aAAa,EAAE,oBAAoB,CAAC;IACpC,UAAU,EAAE,OAAO,CAAC;CACrB;AAED,eAAO,MAAM,UAAU,GAAI,+BAA+B,eAAe,4CA8ExE,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { ProjectConfigManager } from '../commands/project-config-manager.js';
|
|
2
|
+
interface AuthStatusProps {
|
|
3
|
+
configManager: ProjectConfigManager;
|
|
4
|
+
}
|
|
5
|
+
export declare const AuthStatus: ({ configManager }: AuthStatusProps) => import("react/jsx-runtime").JSX.Element;
|
|
6
|
+
export {};
|
|
7
|
+
//# sourceMappingURL=auth-status.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth-status.d.ts","sourceRoot":"","sources":["../../../src/components/auth-status.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,uCAAuC,CAAC;AAIlF,UAAU,eAAe;IACvB,aAAa,EAAE,oBAAoB,CAAC;CACrC;AAED,eAAO,MAAM,UAAU,GAAI,mBAAmB,eAAe,4CA0G5D,CAAC"}
|
|
@@ -3,6 +3,16 @@ interface BrainRunProps {
|
|
|
3
3
|
watch?: boolean;
|
|
4
4
|
options?: Record<string, string>;
|
|
5
5
|
}
|
|
6
|
-
|
|
6
|
+
/**
|
|
7
|
+
* BrainRun - Searches for a brain by identifier and runs it.
|
|
8
|
+
*
|
|
9
|
+
* State machine handles all async operations via invoke.
|
|
10
|
+
* Flow:
|
|
11
|
+
* 1. Search for brain by name (fuzzy search)
|
|
12
|
+
* 2. If single match, run it; if multiple, show disambiguation UI; if none, show error
|
|
13
|
+
* 3. Start the brain run
|
|
14
|
+
* 4. Show run ID or Watch component based on watch flag
|
|
15
|
+
*/
|
|
16
|
+
export declare const BrainRun: ({ identifier, watch, options }: BrainRunProps) => import("react/jsx-runtime").JSX.Element | null;
|
|
7
17
|
export {};
|
|
8
18
|
//# sourceMappingURL=brain-run.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"brain-run.d.ts","sourceRoot":"","sources":["../../../src/components/brain-run.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"brain-run.d.ts","sourceRoot":"","sources":["../../../src/components/brain-run.tsx"],"names":[],"mappings":"AAqCA,UAAU,aAAa;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC;AAmKD;;;;;;;;;GASG;AACH,eAAO,MAAM,QAAQ,GAAI,gCAAwC,aAAa,mDAkE7E,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"brain-top-table.d.ts","sourceRoot":"","sources":["../../../src/components/brain-top-table.tsx"],"names":[],"mappings":"AAIA,UAAU,YAAY;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,GAAG,CAAC;IACd,KAAK,CAAC,EAAE,GAAG,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,UAAU,kBAAkB;IAC1B,aAAa,EAAE,YAAY,EAAE,CAAC;IAC9B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;
|
|
1
|
+
{"version":3,"file":"brain-top-table.d.ts","sourceRoot":"","sources":["../../../src/components/brain-top-table.tsx"],"names":[],"mappings":"AAIA,UAAU,YAAY;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,GAAG,CAAC;IACd,KAAK,CAAC,EAAE,GAAG,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,UAAU,kBAAkB;IAC1B,aAAa,EAAE,YAAY,EAAE,CAAC;IAC9B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AA+ED,eAAO,MAAM,aAAa,GAAI,qEAM3B,kBAAkB,4CAiHpB,CAAC;AAGF,YAAY,EAAE,YAAY,EAAE,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { StoredEvent } from './events-view.js';
|
|
2
|
+
interface EventDetailProps {
|
|
3
|
+
stored: StoredEvent;
|
|
4
|
+
scrollOffset: number;
|
|
5
|
+
onScrollChange: (offset: number) => void;
|
|
6
|
+
isActive?: boolean;
|
|
7
|
+
}
|
|
8
|
+
export declare const EventDetail: ({ stored, scrollOffset, onScrollChange, isActive }: EventDetailProps) => import("react/jsx-runtime").JSX.Element;
|
|
9
|
+
export {};
|
|
10
|
+
//# sourceMappingURL=event-detail.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"event-detail.d.ts","sourceRoot":"","sources":["../../../src/components/event-detail.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEpD,UAAU,gBAAgB;IACxB,MAAM,EAAE,WAAW,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AA+ND,eAAO,MAAM,WAAW,GAAI,oDAA2D,gBAAgB,4CAqDtG,CAAC"}
|