@jayjiang/byoao 1.0.0 → 1.0.1
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/cli/cli-program.js
CHANGED
|
File without changes
|
package/package.json
CHANGED
|
@@ -1,74 +0,0 @@
|
|
|
1
|
-
import { execSync } from "node:child_process";
|
|
2
|
-
import { readOpencodeConfig, writeOpencodeConfig } from "../vault/opencode-config.js";
|
|
3
|
-
/** In-memory token cache to avoid re-reading gcloud on every call. */
|
|
4
|
-
let cachedToken = null;
|
|
5
|
-
let cachedExpiresAt = 0;
|
|
6
|
-
/** Buffer: refresh 5 minutes before actual expiry. */
|
|
7
|
-
const EXPIRY_BUFFER_MS = 5 * 60 * 1000;
|
|
8
|
-
/** gcloud ADC tokens are valid for ~60 minutes. */
|
|
9
|
-
const TOKEN_LIFETIME_MS = 55 * 60 * 1000;
|
|
10
|
-
/** Simple mutex to prevent concurrent refresh calls. */
|
|
11
|
-
let refreshInFlight = null;
|
|
12
|
-
/**
|
|
13
|
-
* Get a fresh gcloud access token via ADC.
|
|
14
|
-
* Returns null if gcloud is not available or not authenticated.
|
|
15
|
-
*/
|
|
16
|
-
function getGcloudAccessToken() {
|
|
17
|
-
try {
|
|
18
|
-
return execSync("gcloud auth application-default print-access-token", {
|
|
19
|
-
encoding: "utf-8",
|
|
20
|
-
timeout: 10_000,
|
|
21
|
-
stdio: ["pipe", "pipe", "pipe"],
|
|
22
|
-
}).trim() || null;
|
|
23
|
-
}
|
|
24
|
-
catch {
|
|
25
|
-
return null;
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
/**
|
|
29
|
-
* Write the Bearer token into the BigQuery MCP server config headers.
|
|
30
|
-
*/
|
|
31
|
-
async function writeTokenToConfig(token) {
|
|
32
|
-
const config = await readOpencodeConfig();
|
|
33
|
-
const mcp = config.mcp || {};
|
|
34
|
-
if (!mcp.bigquery)
|
|
35
|
-
return;
|
|
36
|
-
mcp.bigquery.headers = { Authorization: `Bearer ${token}` };
|
|
37
|
-
config.mcp = mcp;
|
|
38
|
-
await writeOpencodeConfig(config);
|
|
39
|
-
}
|
|
40
|
-
/**
|
|
41
|
-
* Refresh the BigQuery Bearer token if expired or missing.
|
|
42
|
-
* Called from the `tool.execute.before` hook for `mcp__bigquery__*` tools.
|
|
43
|
-
*
|
|
44
|
-
* Uses a mutex so concurrent BigQuery tool calls don't all refresh at once.
|
|
45
|
-
*/
|
|
46
|
-
export async function refreshBigQueryToken() {
|
|
47
|
-
const now = Date.now();
|
|
48
|
-
// Token still valid — nothing to do
|
|
49
|
-
if (cachedToken && now < cachedExpiresAt - EXPIRY_BUFFER_MS) {
|
|
50
|
-
return;
|
|
51
|
-
}
|
|
52
|
-
// If another refresh is already in flight, wait for it
|
|
53
|
-
if (refreshInFlight) {
|
|
54
|
-
await refreshInFlight;
|
|
55
|
-
return;
|
|
56
|
-
}
|
|
57
|
-
refreshInFlight = (async () => {
|
|
58
|
-
try {
|
|
59
|
-
const token = getGcloudAccessToken();
|
|
60
|
-
if (token) {
|
|
61
|
-
cachedToken = token;
|
|
62
|
-
cachedExpiresAt = now + TOKEN_LIFETIME_MS;
|
|
63
|
-
await writeTokenToConfig(token);
|
|
64
|
-
}
|
|
65
|
-
// If gcloud fails, we let the MCP call proceed and fail —
|
|
66
|
-
// tool.execute.after will rewrite the error to guide the agent.
|
|
67
|
-
}
|
|
68
|
-
finally {
|
|
69
|
-
refreshInFlight = null;
|
|
70
|
-
}
|
|
71
|
-
})();
|
|
72
|
-
await refreshInFlight;
|
|
73
|
-
}
|
|
74
|
-
//# sourceMappingURL=bigquery-token.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"bigquery-token.js","sourceRoot":"","sources":["../../src/hooks/bigquery-token.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAEtF,sEAAsE;AACtE,IAAI,WAAW,GAAkB,IAAI,CAAC;AACtC,IAAI,eAAe,GAAG,CAAC,CAAC;AAExB,sDAAsD;AACtD,MAAM,gBAAgB,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;AAEvC,mDAAmD;AACnD,MAAM,iBAAiB,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAEzC,wDAAwD;AACxD,IAAI,eAAe,GAAyB,IAAI,CAAC;AAEjD;;;GAGG;AACH,SAAS,oBAAoB;IAC3B,IAAI,CAAC;QACH,OAAO,QAAQ,CAAC,oDAAoD,EAAE;YACpE,QAAQ,EAAE,OAAO;YACjB,OAAO,EAAE,MAAM;YACf,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;SAChC,CAAC,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC;IACpB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,kBAAkB,CAAC,KAAa;IAC7C,MAAM,MAAM,GAAG,MAAM,kBAAkB,EAAE,CAAC;IAC1C,MAAM,GAAG,GAAI,MAAM,CAAC,GAA+C,IAAI,EAAE,CAAC;IAC1E,IAAI,CAAC,GAAG,CAAC,QAAQ;QAAE,OAAO;IAE1B,GAAG,CAAC,QAAQ,CAAC,OAAO,GAAG,EAAE,aAAa,EAAE,UAAU,KAAK,EAAE,EAAE,CAAC;IAC5D,MAAM,CAAC,GAAG,GAAG,GAAG,CAAC;IACjB,MAAM,mBAAmB,CAAC,MAAM,CAAC,CAAC;AACpC,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB;IACxC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAEvB,oCAAoC;IACpC,IAAI,WAAW,IAAI,GAAG,GAAG,eAAe,GAAG,gBAAgB,EAAE,CAAC;QAC5D,OAAO;IACT,CAAC;IAED,uDAAuD;IACvD,IAAI,eAAe,EAAE,CAAC;QACpB,MAAM,eAAe,CAAC;QACtB,OAAO;IACT,CAAC;IAED,eAAe,GAAG,CAAC,KAAK,IAAI,EAAE;QAC5B,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,oBAAoB,EAAE,CAAC;YACrC,IAAI,KAAK,EAAE,CAAC;gBACV,WAAW,GAAG,KAAK,CAAC;gBACpB,eAAe,GAAG,GAAG,GAAG,iBAAiB,CAAC;gBAC1C,MAAM,kBAAkB,CAAC,KAAK,CAAC,CAAC;YAClC,CAAC;YACD,0DAA0D;YAC1D,gEAAgE;QAClE,CAAC;gBAAS,CAAC;YACT,eAAe,GAAG,IAAI,CAAC;QACzB,CAAC;IACH,CAAC,CAAC,EAAE,CAAC;IAEL,MAAM,eAAe,CAAC;AACxB,CAAC"}
|
package/dist/tools/add-member.js
DELETED
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
import { tool } from "@opencode-ai/plugin/tool";
|
|
2
|
-
import { addMember } from "../vault/member.js";
|
|
3
|
-
export const byoao_add_member = tool({
|
|
4
|
-
description: "Add a new team member note to an existing vault. Creates a person note in People/ and updates the team index and AGENT.md wikilinks.",
|
|
5
|
-
args: {
|
|
6
|
-
vaultPath: tool.schema.string().describe("Path to the Obsidian vault"),
|
|
7
|
-
name: tool.schema.string().describe("Person's full name"),
|
|
8
|
-
role: tool.schema.string().optional().describe("Person's role/title"),
|
|
9
|
-
team: tool.schema.string().optional().describe("Team name"),
|
|
10
|
-
},
|
|
11
|
-
async execute(args) {
|
|
12
|
-
const result = await addMember({
|
|
13
|
-
vaultPath: args.vaultPath,
|
|
14
|
-
name: args.name,
|
|
15
|
-
role: args.role || "",
|
|
16
|
-
team: args.team || "",
|
|
17
|
-
});
|
|
18
|
-
return `✓ Added member: ${args.name}\n File: ${result.filePath}\n Wikilinks updated: ${result.wikilinksAdded}`;
|
|
19
|
-
},
|
|
20
|
-
});
|
|
21
|
-
//# sourceMappingURL=add-member.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"add-member.js","sourceRoot":"","sources":["../../src/tools/add-member.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAE/C,MAAM,CAAC,MAAM,gBAAgB,GAAG,IAAI,CAAC;IACnC,WAAW,EACT,sIAAsI;IACxI,IAAI,EAAE;QACJ,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,4BAA4B,CAAC;QACtE,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,oBAAoB,CAAC;QACzD,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qBAAqB,CAAC;QACrE,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC;KAC5D;IACD,KAAK,CAAC,OAAO,CAAC,IAAI;QAChB,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC;YAC7B,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,EAAE;YACrB,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,EAAE;SACtB,CAAC,CAAC;QAEH,OAAO,mBAAmB,IAAI,CAAC,IAAI,aAAa,MAAM,CAAC,QAAQ,0BAA0B,MAAM,CAAC,cAAc,EAAE,CAAC;IACnH,CAAC;CACF,CAAC,CAAC"}
|