@quantiya/codevibe-codex-plugin 2.0.116 → 2.0.118
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/native-launch.js +1 -1
- package/dist/server.js +1 -1
- package/node_modules/@quantiya/codevibe-core/dist/index.js +555 -552
- package/node_modules/@quantiya/codevibe-core/dist/orchestration-shell/cli.js +917 -619
- package/node_modules/@quantiya/codevibe-core/dist/orchestration-shell/slash-suggest.d.ts +10 -0
- package/node_modules/@quantiya/codevibe-core/dist/substrate-launch/agy-auth-seed.d.ts +17 -7
- package/node_modules/@quantiya/codevibe-core/dist/substrate-launch/secret-service-client.d.ts +78 -0
- package/node_modules/@quantiya/codevibe-core/package.json +1 -1
- package/package.json +2 -2
|
@@ -13,6 +13,16 @@ export declare function isSlashCommandInProgress(value: string): boolean;
|
|
|
13
13
|
* dropdown). A bare `/` returns the whole list.
|
|
14
14
|
*/
|
|
15
15
|
export declare function filterSlashSuggestions(value: string, commands: SlashCommandInfo[]): SlashCommandInfo[];
|
|
16
|
+
/**
|
|
17
|
+
* True when Enter should RUN the input instead of completing it: the value is
|
|
18
|
+
* already exactly the highlighted slash command (`/exit` with `/exit`
|
|
19
|
+
* highlighted). A partial (`/ex`) or a highlight the user moved to another
|
|
20
|
+
* command still completes (Hendry 2026-11-12: a fully typed command must not
|
|
21
|
+
* need a second Enter).
|
|
22
|
+
*/
|
|
23
|
+
export declare function enterRunsTypedCommand(value: string, suggestions: ReadonlyArray<{
|
|
24
|
+
name: string;
|
|
25
|
+
}>, highlight: number): boolean;
|
|
16
26
|
/**
|
|
17
27
|
* Builds a single dropdown row as ONE physical line (≤ `maxCols`) so it can
|
|
18
28
|
* never wrap and inflate the dropdown's row count on a narrow terminal
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { SpawnConfinementUnavailable } from '../local-executor/types';
|
|
2
|
+
import { type SecretServiceResult } from './secret-service-client';
|
|
2
3
|
/** The closed advisory-cell notice (closed set member 6; byte-identical in both apps). */
|
|
3
4
|
export declare const AGY_SIGN_IN_NOTICE = "No answer \u2014 Antigravity isn't signed in. Run `agy` once in a terminal to sign in.";
|
|
4
5
|
/** The task-halt / review-seat reason. */
|
|
@@ -16,9 +17,9 @@ export declare class AgentSignInUnavailable extends SpawnConfinementUnavailable
|
|
|
16
17
|
readonly why: AgySignInWhy;
|
|
17
18
|
constructor(why: AgySignInWhy);
|
|
18
19
|
}
|
|
19
|
-
export type AgySignInWhy = 'not-signed-in' | 'keychain-absent' | 'keychain-timeout' | 'keychain-error' | 'keychain-invalid';
|
|
20
|
+
export type AgySignInWhy = 'not-signed-in' | 'keychain-absent' | 'keychain-timeout' | 'keychain-error' | 'keychain-invalid' | 'keychain-locked';
|
|
20
21
|
export type AgySignIn = {
|
|
21
|
-
source: 'file' | 'keychain';
|
|
22
|
+
source: 'file' | 'keychain' | 'secret-service';
|
|
22
23
|
data: Buffer;
|
|
23
24
|
} | {
|
|
24
25
|
source: 'none';
|
|
@@ -29,20 +30,29 @@ export interface AgySignInDeps {
|
|
|
29
30
|
env?: NodeJS.ProcessEnv;
|
|
30
31
|
securityBin?: string;
|
|
31
32
|
timeoutMs?: number;
|
|
33
|
+
/** Linux: read one Secret Service item (default: secret-service-client.ts). */
|
|
34
|
+
secretService?: (attributes: Record<string, string>) => Promise<SecretServiceResult>;
|
|
35
|
+
/** Linux: running under WSL (default: /proc/version names Microsoft, as bwrap.ts does). */
|
|
36
|
+
isWsl?: boolean;
|
|
37
|
+
/** Linux: read /proc/version (test seam for the default WSL check). */
|
|
38
|
+
procVersion?: () => string;
|
|
32
39
|
}
|
|
33
40
|
/** The decoded sign-in JSON is usable when `token` holds non-empty string `access_token` and `refresh_token`. */
|
|
34
41
|
export declare function validAgySignInJson(data: Buffer): boolean;
|
|
35
42
|
/** go-keyring's stored form → the decoded JSON bytes, or null unless prefix, canonical base64 and JSON all check. */
|
|
36
43
|
export declare function decodeKeychainValue(value: string): Buffer | null;
|
|
37
|
-
/**
|
|
44
|
+
/**
|
|
45
|
+
* The sign-in for an agy spawn: a valid token file, else the macOS Keychain item or (native Linux) the unlocked Secret
|
|
46
|
+
* Service item, else none. Never logs values.
|
|
47
|
+
*/
|
|
38
48
|
export declare function readAgySignIn(hostAgyDir: string, deps?: AgySignInDeps): Promise<AgySignIn>;
|
|
39
49
|
/**
|
|
40
|
-
* Seed `<destAgyDir>/antigravity-oauth-token` for one spawn. macOS: exclusive, no-follow, 0600,
|
|
41
|
-
* AgentSignInUnavailable when there is no usable sign-in. Elsewhere: the pre-FU-A copy (`legacyCopy`).
|
|
42
|
-
* and a short digest for the log, never the value.
|
|
50
|
+
* Seed `<destAgyDir>/antigravity-oauth-token` for one spawn. macOS and native Linux: exclusive, no-follow, 0600,
|
|
51
|
+
* re-hashed; throws AgentSignInUnavailable when there is no usable sign-in. Elsewhere: the pre-FU-A copy (`legacyCopy`).
|
|
52
|
+
* Returns the source and a short digest for the log, never the value.
|
|
43
53
|
*/
|
|
44
54
|
export declare function seedAgySignIn(hostAgyDir: string, destAgyDir: string, deps?: AgySignInDeps): Promise<{
|
|
45
|
-
source: 'file' | 'keychain' | 'legacy-copy' | 'none';
|
|
55
|
+
source: 'file' | 'keychain' | 'secret-service' | 'legacy-copy' | 'none';
|
|
46
56
|
bytes: number;
|
|
47
57
|
sha256: string;
|
|
48
58
|
}>;
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import * as net from 'node:net';
|
|
2
|
+
export type SecretServiceResult = {
|
|
3
|
+
kind: 'secret';
|
|
4
|
+
data: Buffer;
|
|
5
|
+
} | {
|
|
6
|
+
kind: 'none';
|
|
7
|
+
why: 'not-signed-in' | 'keychain-locked';
|
|
8
|
+
} | {
|
|
9
|
+
kind: 'error';
|
|
10
|
+
why: 'keychain-error' | 'keychain-timeout' | 'keychain-invalid';
|
|
11
|
+
};
|
|
12
|
+
export interface SecretServiceOptions {
|
|
13
|
+
env?: NodeJS.ProcessEnv;
|
|
14
|
+
uid?: number;
|
|
15
|
+
timeoutMs?: number;
|
|
16
|
+
/** Test seam: open the bus connection (default: net.createConnection on the parsed address). */
|
|
17
|
+
connect?: (socketPath: string) => net.Socket;
|
|
18
|
+
/** Test seam: is this a socket owned by `uid`? (default: lstat). */
|
|
19
|
+
isOwnSocket?: (p: string, uid: number) => boolean;
|
|
20
|
+
}
|
|
21
|
+
export declare const MAX_SECRET_BYTES = 65536;
|
|
22
|
+
/** The session bus socket path from DBUS_SESSION_BUS_ADDRESS (first unix: entry; abstract → '\0' + name), else null. */
|
|
23
|
+
export declare function sessionBusSocket(env: NodeJS.ProcessEnv, uid: number, isOwnSocket: (p: string, uid: number) => boolean): string | null;
|
|
24
|
+
export declare class DBusWriter {
|
|
25
|
+
private buf;
|
|
26
|
+
len: number;
|
|
27
|
+
private ensure;
|
|
28
|
+
align(n: number): void;
|
|
29
|
+
y(v: number): void;
|
|
30
|
+
u(v: number): void;
|
|
31
|
+
s(v: string): void;
|
|
32
|
+
o(v: string): void;
|
|
33
|
+
g(v: string): void;
|
|
34
|
+
/** An array whose elements align to `elemAlign`; the length excludes the padding before the first element. */
|
|
35
|
+
a(elemAlign: number, fill: () => void): void;
|
|
36
|
+
done(): Buffer;
|
|
37
|
+
}
|
|
38
|
+
export type DBusValue = number | boolean | string | Buffer | DBusValue[] | {
|
|
39
|
+
sig: string;
|
|
40
|
+
value: DBusValue;
|
|
41
|
+
};
|
|
42
|
+
/**
|
|
43
|
+
* Split a signature into its complete types. Strict, so every accepted type consumes bytes when read: no empty struct,
|
|
44
|
+
* a dict entry only directly inside an array, with exactly two members and a basic-type key.
|
|
45
|
+
*/
|
|
46
|
+
export declare function splitSignature(sig: string): string[];
|
|
47
|
+
export declare class DBusReader {
|
|
48
|
+
private readonly b;
|
|
49
|
+
off: number;
|
|
50
|
+
private readonly le;
|
|
51
|
+
constructor(b: Buffer, off: number, le: boolean);
|
|
52
|
+
align(n: number): void;
|
|
53
|
+
private need;
|
|
54
|
+
u32(): number;
|
|
55
|
+
str(len: number): string;
|
|
56
|
+
read(t: string): DBusValue;
|
|
57
|
+
}
|
|
58
|
+
export interface DBusMessage {
|
|
59
|
+
type: number;
|
|
60
|
+
serial: number;
|
|
61
|
+
replySerial?: number;
|
|
62
|
+
errorName?: string;
|
|
63
|
+
member?: string;
|
|
64
|
+
signature: string;
|
|
65
|
+
body: DBusValue[];
|
|
66
|
+
}
|
|
67
|
+
/** One METHOD_CALL; `body` is written by `fill` after the header (aligned to 8). */
|
|
68
|
+
export declare function methodCall(serial: number, dest: string, path: string, iface: string, member: string, signature: string, fill?: (w: DBusWriter) => void): Buffer;
|
|
69
|
+
/**
|
|
70
|
+
* Parse one complete message at the start of `b`; null when more bytes are needed. Throws on malformed input. The body is
|
|
71
|
+
* parsed only when `wantBody(header)` says so (default: always) — unsolicited traffic is skipped by its declared size.
|
|
72
|
+
*/
|
|
73
|
+
export declare function parseMessage(b: Buffer, wantBody?: (m: DBusMessage) => boolean): {
|
|
74
|
+
msg: DBusMessage;
|
|
75
|
+
size: number;
|
|
76
|
+
} | null;
|
|
77
|
+
/** The first unlocked item matching `attributes`, read through a plain session. Never calls Unlock or Prompt. */
|
|
78
|
+
export declare function readSecretServiceItem(attributes: Record<string, string>, opts?: SecretServiceOptions): Promise<SecretServiceResult>;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@quantiya/codevibe-codex-plugin",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.118",
|
|
4
4
|
"description": "Control OpenAI Codex CLI from your iPhone and Android — real-time sync, approve file edits, send prompts by voice. Part of CodeVibe.",
|
|
5
5
|
"main": "dist/server.js",
|
|
6
6
|
"codevibe": {
|
|
@@ -47,7 +47,7 @@
|
|
|
47
47
|
"node": ">=22.0.0"
|
|
48
48
|
},
|
|
49
49
|
"dependencies": {
|
|
50
|
-
"@quantiya/codevibe-core": "^2.0.
|
|
50
|
+
"@quantiya/codevibe-core": "^2.0.102",
|
|
51
51
|
"@quantiya/quorum-core": "^1.0.1",
|
|
52
52
|
"chokidar": "^4.0.0",
|
|
53
53
|
"dotenv": "^16.6.1",
|