@slashfi/agents-sdk 0.78.0 → 0.80.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.
@@ -0,0 +1,406 @@
1
+ "use strict";
2
+ /**
3
+ * adk search — BM25 over materialized ref/tool docs.
4
+ *
5
+ * Walks `${configDir}/refs/` and indexes every ref + tool + skill found:
6
+ *
7
+ * `<configDir>/refs/<ref>/agent.json` → ref-level fields
8
+ * `<configDir>/refs/<ref>/entrypoint.md` → ref-level body
9
+ * `<configDir>/refs/<ref>/tools/<t>.tool.md` → per-tool body
10
+ * `<configDir>/refs/<ref>/tools/<t>.tool.json` → per-tool param names/descs
11
+ * `<configDir>/refs/<ref>/skills/<file>` → per-resource body
12
+ *
13
+ * Platform agents nest under `refs/agents/<@name>/`; integration refs sit
14
+ * directly at `refs/<name>/`. The walker handles both layouts.
15
+ *
16
+ * One BM25 document per ref + one per tool + one per skill resource. Tool
17
+ * and ref names get inserted multiple times into the document text so they
18
+ * outweigh surrounding prose without the BM25 implementation needing
19
+ * per-field weighting.
20
+ *
21
+ * Persistence: `adk sync` calls `writeSearchIndex(configDir)` to dump the
22
+ * raw BM25 docs + per-doc result metadata to `<configDir>/.search-index.json`.
23
+ * `searchRefs` prefers that file when it exists — `adk search` becomes a
24
+ * single file read + BM25 build (a few ms) instead of a recursive walk.
25
+ * Falls back to a fresh walk when the persisted file is missing or stale.
26
+ *
27
+ * The file is dot-prefixed so coding agents treat it as a hidden artifact
28
+ * and don't try to read it directly — they should use `adk search` instead.
29
+ */
30
+ Object.defineProperty(exports, "__esModule", { value: true });
31
+ exports.SEARCH_INDEX_FILENAME = void 0;
32
+ exports.buildSearchIndex = buildSearchIndex;
33
+ exports.searchIndexPath = searchIndexPath;
34
+ exports.writeSearchIndex = writeSearchIndex;
35
+ exports.readSearchIndex = readSearchIndex;
36
+ exports.searchRefs = searchRefs;
37
+ exports.renderResults = renderResults;
38
+ exports.refsRootExists = refsRootExists;
39
+ const node_fs_1 = require("node:fs");
40
+ const node_path_1 = require("node:path");
41
+ const bm25_js_1 = require("./bm25.js");
42
+ const INDEX_VERSION = 1;
43
+ /**
44
+ * Sibling to `refs/` and `adk.d.ts` in the config directory. Dot-prefixed
45
+ * so coding agents treat it as a hidden artifact rather than something
46
+ * they should read directly — agents should query through `adk search`.
47
+ */
48
+ exports.SEARCH_INDEX_FILENAME = ".search-index.json";
49
+ // ============================================
50
+ // Index building (filesystem walk)
51
+ // ============================================
52
+ /**
53
+ * Walk `refsRoot` recursively. Every directory containing an `agent.json`
54
+ * is a materialized ref. Builds the unified BM25 docs + per-result metadata
55
+ * map used by both the live search path and the persisted index writer.
56
+ *
57
+ * Ids embed the kind so that `adk search`'s kind filters can apply post-rank
58
+ * without re-running BM25:
59
+ *
60
+ * `ref:<refName>`
61
+ * `tool:<refName>|<toolName>`
62
+ * `resource:<refName>|<fileName>`
63
+ *
64
+ * The `|` separator is safe because ref / tool / resource names use
65
+ * letters / numbers / `-` / `_` / `/` / `@` / `.` only.
66
+ */
67
+ function buildSearchIndex(refsRoot) {
68
+ const docs = [];
69
+ const items = {};
70
+ function walk(dir) {
71
+ if (!(0, node_fs_1.existsSync)(dir))
72
+ return;
73
+ let entries;
74
+ try {
75
+ entries = (0, node_fs_1.readdirSync)(dir);
76
+ }
77
+ catch {
78
+ return;
79
+ }
80
+ const agentJsonPath = (0, node_path_1.join)(dir, "agent.json");
81
+ if ((0, node_fs_1.existsSync)(agentJsonPath)) {
82
+ try {
83
+ const manifest = JSON.parse((0, node_fs_1.readFileSync)(agentJsonPath, "utf-8"));
84
+ const refName = manifest.name ?? (0, node_path_1.basename)(dir);
85
+ const description = manifest.description ?? "";
86
+ const toolCount = manifest.toolCount ?? manifest.tools?.length ?? 0;
87
+ const entrypointPath = (0, node_path_1.join)(dir, "entrypoint.md");
88
+ const entrypointBody = (0, node_fs_1.existsSync)(entrypointPath)
89
+ ? (0, node_fs_1.readFileSync)(entrypointPath, "utf-8")
90
+ : "";
91
+ const refId = `ref:${refName}`;
92
+ docs.push({
93
+ id: refId,
94
+ text: [refName, refName, description, entrypointBody].join(" \n "),
95
+ });
96
+ items[refId] = {
97
+ kind: "ref",
98
+ ref: refName,
99
+ summary: description || refName,
100
+ docs: dir,
101
+ entrypoint: entrypointPath,
102
+ toolCount,
103
+ };
104
+ const toolsDir = (0, node_path_1.join)(dir, "tools");
105
+ if ((0, node_fs_1.existsSync)(toolsDir)) {
106
+ for (const file of (0, node_fs_1.readdirSync)(toolsDir)) {
107
+ if (!file.endsWith(".tool.md"))
108
+ continue;
109
+ const toolMdPath = (0, node_path_1.join)(toolsDir, file);
110
+ const toolJsonPath = toolMdPath.replace(/\.tool\.md$/, ".tool.json");
111
+ const md = (0, node_fs_1.readFileSync)(toolMdPath, "utf-8");
112
+ const summary = firstNonBlankLine(md, refName, file);
113
+ const tool = parseToolName(toolJsonPath, file);
114
+ const paramText = extractParamText(toolJsonPath);
115
+ // Repeat the high-signal terms (ref + tool name) so BM25
116
+ // ranks exact-name matches above ambient body matches.
117
+ const text = [
118
+ tool,
119
+ tool,
120
+ tool,
121
+ refName,
122
+ refName,
123
+ md,
124
+ paramText,
125
+ ].join(" \n ");
126
+ const id = `tool:${refName}|${tool}`;
127
+ docs.push({ id, text });
128
+ items[id] = {
129
+ kind: "tool",
130
+ ref: refName,
131
+ tool,
132
+ summary,
133
+ docs: toolMdPath,
134
+ schema: toolJsonPath,
135
+ call: `adk ref call ${refName} ${tool} '{...}'`,
136
+ };
137
+ }
138
+ }
139
+ // Skills / resources written by `materializeRef` — text content
140
+ // synced from the registry's `read_resources` / `list_resources`
141
+ // surface. Indexed so `adk search` can surface ref-specific
142
+ // skill files (e.g. "writing pages" → notion's writing-pages.md).
143
+ const skillsDir = (0, node_path_1.join)(dir, "skills");
144
+ if ((0, node_fs_1.existsSync)(skillsDir)) {
145
+ for (const file of (0, node_fs_1.readdirSync)(skillsDir)) {
146
+ const path = (0, node_path_1.join)(skillsDir, file);
147
+ try {
148
+ if (!(0, node_fs_1.statSync)(path).isFile())
149
+ continue;
150
+ }
151
+ catch {
152
+ continue;
153
+ }
154
+ let body;
155
+ try {
156
+ body = (0, node_fs_1.readFileSync)(path, "utf-8");
157
+ }
158
+ catch {
159
+ continue;
160
+ }
161
+ const summary = firstNonBlankLine(body, refName, file);
162
+ const text = [file, file, refName, refName, body].join(" \n ");
163
+ const id = `resource:${refName}|${file}`;
164
+ docs.push({ id, text });
165
+ items[id] = {
166
+ kind: "resource",
167
+ ref: refName,
168
+ resource: file,
169
+ summary,
170
+ docs: path,
171
+ };
172
+ }
173
+ }
174
+ }
175
+ catch {
176
+ // Malformed agent.json — skip this directory but keep walking.
177
+ }
178
+ }
179
+ // Recurse into subdirectories that aren't tool / skill / types output —
180
+ // those have no nested agents. Anything else (e.g. `agents/`) might
181
+ // hold platform-agent refs.
182
+ for (const entry of entries) {
183
+ const full = (0, node_path_1.join)(dir, entry);
184
+ let isDir;
185
+ try {
186
+ isDir = (0, node_fs_1.statSync)(full).isDirectory();
187
+ }
188
+ catch {
189
+ continue;
190
+ }
191
+ if (!isDir)
192
+ continue;
193
+ if (entry === "tools" || entry === "skills" || entry === "types")
194
+ continue;
195
+ walk(full);
196
+ }
197
+ }
198
+ walk(refsRoot);
199
+ return {
200
+ version: INDEX_VERSION,
201
+ generatedAt: new Date().toISOString(),
202
+ docs,
203
+ items,
204
+ };
205
+ }
206
+ // ============================================
207
+ // Persistence
208
+ // ============================================
209
+ /** Resolve the persisted-index path for a given config directory. */
210
+ function searchIndexPath(configDir) {
211
+ return (0, node_path_1.join)(configDir, exports.SEARCH_INDEX_FILENAME);
212
+ }
213
+ /**
214
+ * Build and write the persisted index to `<configDir>/.search-index.json`.
215
+ * Called from `adk sync` so subsequent `adk search` invocations skip the
216
+ * recursive ref walk.
217
+ */
218
+ function writeSearchIndex(configDir) {
219
+ const refsRoot = (0, node_path_1.join)(configDir, "refs");
220
+ const index = buildSearchIndex(refsRoot);
221
+ const path = searchIndexPath(configDir);
222
+ const dir = (0, node_path_1.dirname)(path);
223
+ if (!(0, node_fs_1.existsSync)(dir))
224
+ (0, node_fs_1.mkdirSync)(dir, { recursive: true });
225
+ // Pretty-print in dev only; production indexes will be small enough
226
+ // that minified output isn't worth the readability cost.
227
+ (0, node_fs_1.writeFileSync)(path, `${JSON.stringify(index, null, 2)}\n`, "utf-8");
228
+ return { path, documentCount: index.docs.length };
229
+ }
230
+ /**
231
+ * Read a persisted index. Returns `null` if the file is missing,
232
+ * unreadable, malformed, or written by an incompatible version.
233
+ */
234
+ function readSearchIndex(configDir) {
235
+ const path = searchIndexPath(configDir);
236
+ if (!(0, node_fs_1.existsSync)(path))
237
+ return null;
238
+ try {
239
+ const raw = (0, node_fs_1.readFileSync)(path, "utf-8");
240
+ const parsed = JSON.parse(raw);
241
+ if (parsed?.version !== INDEX_VERSION)
242
+ return null;
243
+ if (!Array.isArray(parsed.docs))
244
+ return null;
245
+ if (!parsed.items || typeof parsed.items !== "object")
246
+ return null;
247
+ return parsed;
248
+ }
249
+ catch {
250
+ return null;
251
+ }
252
+ }
253
+ /** Pick the first non-blank line of `body` as a one-line summary. */
254
+ function firstNonBlankLine(body, refName, fileName) {
255
+ for (const raw of body.split("\n")) {
256
+ const line = raw.trim();
257
+ if (!line)
258
+ continue;
259
+ if (line.startsWith("#"))
260
+ continue;
261
+ return line;
262
+ }
263
+ return `${refName}/${fileName}`;
264
+ }
265
+ /**
266
+ * Pull the actual tool name from the .tool.json. Falls back to the
267
+ * filename (without .tool.md) if the json is missing or unreadable —
268
+ * still useful as a search anchor even if not exact.
269
+ */
270
+ function parseToolName(toolJsonPath, fileName) {
271
+ if ((0, node_fs_1.existsSync)(toolJsonPath)) {
272
+ try {
273
+ const obj = JSON.parse((0, node_fs_1.readFileSync)(toolJsonPath, "utf-8"));
274
+ if (typeof obj.name === "string" && obj.name.length > 0)
275
+ return obj.name;
276
+ }
277
+ catch {
278
+ // fall through
279
+ }
280
+ }
281
+ return fileName.replace(/\.tool\.md$/, "");
282
+ }
283
+ /**
284
+ * Pull parameter names + descriptions out of a .tool.json's inputSchema.
285
+ * Surfaces them as plain text into the BM25 index so queries like
286
+ * "calendar event id" land on the right tool.
287
+ */
288
+ function extractParamText(toolJsonPath) {
289
+ if (!(0, node_fs_1.existsSync)(toolJsonPath))
290
+ return "";
291
+ try {
292
+ const obj = JSON.parse((0, node_fs_1.readFileSync)(toolJsonPath, "utf-8"));
293
+ const parts = [];
294
+ if (obj.description)
295
+ parts.push(obj.description);
296
+ const props = obj.inputSchema?.properties ?? {};
297
+ for (const [name, info] of Object.entries(props)) {
298
+ parts.push(name);
299
+ if (typeof info?.description === "string")
300
+ parts.push(info.description);
301
+ }
302
+ return parts.join(" ");
303
+ }
304
+ catch {
305
+ return "";
306
+ }
307
+ }
308
+ // ============================================
309
+ // Search
310
+ // ============================================
311
+ /**
312
+ * Run a BM25 search over the materialized refs.
313
+ *
314
+ * Prefers the persisted `<configDir>/search-index.json` (written by
315
+ * `adk sync`) when it exists — that path skips the recursive walk and
316
+ * runs in single-digit ms even with hundreds of tools. Falls back to a
317
+ * fresh walk of `refsRoot` when the persisted file is missing or stale.
318
+ *
319
+ * @param refsRoot The materialized refs directory (e.g. `~/.adk/refs`).
320
+ * We derive `<configDir>` from this as the parent so callers don't
321
+ * have to plumb both. Pass an `index` directly via `options.index` to
322
+ * bypass disk I/O entirely (used by tests).
323
+ */
324
+ function searchRefs(refsRoot, query, options = {}) {
325
+ const index = options.index ??
326
+ readSearchIndex((0, node_path_1.dirname)(refsRoot)) ??
327
+ buildSearchIndex(refsRoot);
328
+ const bm25 = (0, bm25_js_1.createBM25Index)(index.docs);
329
+ const limit = options.limit ?? 10;
330
+ // Pull more raw hits than `limit` so the kind / ref filters below have
331
+ // headroom to drop irrelevant matches without short-changing the caller.
332
+ // 5x is plenty for typical 10-20 limits.
333
+ const raw = bm25.search(query, limit * 5);
334
+ const results = [];
335
+ for (const hit of raw) {
336
+ if (results.length >= limit)
337
+ break;
338
+ const item = index.items[hit.id];
339
+ if (!item)
340
+ continue;
341
+ if (options.toolsOnly && item.kind !== "tool")
342
+ continue;
343
+ if (options.refsOnly && item.kind !== "ref")
344
+ continue;
345
+ if (options.ref && !refMatches(options.ref, item.ref))
346
+ continue;
347
+ // Spread the stored item and tack on the query-time score. Each
348
+ // `item` matches one of the `SearchResult` variants by construction
349
+ // (see `buildSearchIndex`), so this is type-safe.
350
+ results.push({ ...item, score: hit.score });
351
+ }
352
+ return results;
353
+ }
354
+ /** Match `ref` filter loosely — accepts both bare names and `/agents/@…` paths. */
355
+ function refMatches(filter, ref) {
356
+ if (filter === ref)
357
+ return true;
358
+ // Allow `@clock` as a shorthand for `/agents/@clock`, and vice versa.
359
+ if (ref === `/agents/${filter}`)
360
+ return true;
361
+ if (`/agents/${ref}` === filter)
362
+ return true;
363
+ return false;
364
+ }
365
+ // ============================================
366
+ // CLI rendering
367
+ // ============================================
368
+ /** Concise human-readable rendering — one numbered block per result. */
369
+ function renderResults(results) {
370
+ if (results.length === 0)
371
+ return "No results.";
372
+ const blocks = [];
373
+ for (let i = 0; i < results.length; i++) {
374
+ const r = results[i];
375
+ const score = r.score.toFixed(2);
376
+ if (r.kind === "tool") {
377
+ blocks.push([
378
+ `${i + 1}. ${r.ref}.${r.tool} score=${score}`,
379
+ ` ${r.summary}`,
380
+ ` Docs: ${r.docs}`,
381
+ ` Call: ${r.call}`,
382
+ ].join("\n"));
383
+ }
384
+ else if (r.kind === "ref") {
385
+ blocks.push([
386
+ `${i + 1}. ${r.ref} (ref, ${r.toolCount} tools) score=${score}`,
387
+ ` ${r.summary}`,
388
+ ` Docs: ${r.docs}`,
389
+ ].join("\n"));
390
+ }
391
+ else {
392
+ blocks.push([
393
+ `${i + 1}. ${r.ref}/${r.resource} (resource) score=${score}`,
394
+ ` ${r.summary}`,
395
+ ` Docs: ${r.docs}`,
396
+ ].join("\n"));
397
+ }
398
+ }
399
+ return blocks.join("\n\n");
400
+ }
401
+ // Local helpers — exposed so callers (the CLI) can detect a missing
402
+ // refs root and print a useful message instead of an empty result list.
403
+ function refsRootExists(refsRoot) {
404
+ return (0, node_fs_1.existsSync)(refsRoot) && (0, node_fs_1.statSync)(refsRoot).isDirectory();
405
+ }
406
+ //# sourceMappingURL=search.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.js","sourceRoot":"","sources":["../../src/search.ts"],"names":[],"mappings":"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"}
@@ -33,16 +33,48 @@ export interface RegistryCacheToolSummary {
33
33
  description?: string;
34
34
  }
35
35
  /**
36
- * Per-ref cache entry. Updated as a side-effect of `ref.add()` and
37
- * `ref.inspect()` whenever the registry response carries description or tool
38
- * information. Identity-relative (lives next to the consumer-config that
39
- * issued the registry call), so permission-filtered views stay consistent.
36
+ * Slim auth-field metadata cached so hosts can locally answer "is this
37
+ * ref ready to call?" without a registry round-trip. Mirrors the
38
+ * authoritative shape `auth-status` produces same source of truth,
39
+ * just persisted.
40
+ *
41
+ * For each field name in the security scheme:
42
+ * - `required` — must end up satisfied for `ref.call` to work.
43
+ * - `automated` — adk fills this in itself (e.g. dynamic OAuth
44
+ * client registration). Doesn't need to be `present`
45
+ * in the user's config to count as satisfied.
46
+ */
47
+ export interface RegistryCacheAuthField {
48
+ required: boolean;
49
+ automated: boolean;
50
+ }
51
+ /**
52
+ * Per-ref cache entry. Updated as a side-effect of `ref.add()`,
53
+ * `ref.inspect()`, and `ref.authStatus()` whenever the registry
54
+ * response carries description / tool / security-scheme info.
55
+ * Identity-relative (lives next to the consumer-config that issued
56
+ * the registry call), so permission-filtered views stay consistent.
40
57
  */
41
58
  export interface RegistryCacheEntry {
42
59
  /** Canonical agent path (e.g. `notion`). Stored for sanity/debug. */
43
60
  ref: string;
44
61
  description?: string;
45
62
  tools?: RegistryCacheToolSummary[];
63
+ /**
64
+ * Auth field requirements derived from the registry's security
65
+ * scheme (extracted by `auth-status`). When present, hosts can
66
+ * compute "is this ref callable?" by intersecting these with the
67
+ * entry's `config` — no network round-trip needed. Absent when the
68
+ * scheme couldn't be fetched (e.g. registry was offline at add
69
+ * time); fall back to whatever heuristic the caller chooses.
70
+ *
71
+ * Note on proxy refs: when the entry is in `proxy` mode the
72
+ * security scheme is exposed by the *proxy*, and the answer to
73
+ * "is this callable?" lives server-side — `authFields` is omitted
74
+ * locally and hosts should treat proxy refs as authoritative
75
+ * regardless of entry-side fields.
76
+ */
77
+ authFields?: Record<string, RegistryCacheAuthField>;
46
78
  /** ISO timestamp of the most recent registry round-trip that wrote this. */
47
79
  fetchedAt: string;
48
80
  }
@@ -54,6 +86,30 @@ export interface RegistryCacheEntry {
54
86
  export interface RegistryCache {
55
87
  refs: Record<string, RegistryCacheEntry>;
56
88
  }
89
+ /**
90
+ * "Is this ref ready to call?" answered locally using the cached
91
+ * security-scheme requirements. Mirrors the `complete` boolean
92
+ * `auth-status` returns, but doesn't need a network round-trip — the
93
+ * cached `authFields` capture what the registry said is required, and
94
+ * we evaluate satisfaction against the entry's current `config`.
95
+ *
96
+ * Behavior:
97
+ * - `mode: 'proxy'` refs → always true. Auth lives server-side; the
98
+ * proxy is the source of truth, no entry-side fields involved.
99
+ * - Cache miss (no `authFields` for this ref yet) → returns `null`,
100
+ * signaling "I don't know — caller should fall back to its own
101
+ * heuristic or call `auth-status` to populate the cache".
102
+ * - Cache hit → for every required, non-automated field, checks
103
+ * presence in `entry.config`. Mirrors the `present || resolvable`
104
+ * check in `auth-status` but evaluates against current config.
105
+ * `automated` fields (e.g. dynamic OAuth client_id) count as
106
+ * satisfied even when absent — adk supplies them at call time.
107
+ *
108
+ * Returning `null` for cache miss is intentional. A boolean would
109
+ * force callers to choose a default that's wrong half the time;
110
+ * `null` lets them branch explicitly.
111
+ */
112
+ export declare function isRefAuthComplete(entry: RefEntry, cacheEntry: RegistryCacheEntry | undefined): boolean | null;
57
113
  /** Context passed to the resolveCredentials callback */
58
114
  export interface ResolveCredentialsContext {
59
115
  /** Ref name */
@@ -1 +1 @@
1
- {"version":3,"file":"config-store.d.ts","sourceRoot":"","sources":["../src/config-store.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config-store.d.ts","sourceRoot":"","sources":["../src/config-store.ts"],"names":[],"mappings":"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"}
@@ -24,6 +24,48 @@ import { createRegistryConsumer } from "./registry-consumer.js";
24
24
  const CONFIG_PATH = "consumer-config.json";
25
25
  const REGISTRY_CACHE_PATH = "registry-cache.json";
26
26
  const SECRET_PREFIX = "secret:";
27
+ /**
28
+ * "Is this ref ready to call?" answered locally using the cached
29
+ * security-scheme requirements. Mirrors the `complete` boolean
30
+ * `auth-status` returns, but doesn't need a network round-trip — the
31
+ * cached `authFields` capture what the registry said is required, and
32
+ * we evaluate satisfaction against the entry's current `config`.
33
+ *
34
+ * Behavior:
35
+ * - `mode: 'proxy'` refs → always true. Auth lives server-side; the
36
+ * proxy is the source of truth, no entry-side fields involved.
37
+ * - Cache miss (no `authFields` for this ref yet) → returns `null`,
38
+ * signaling "I don't know — caller should fall back to its own
39
+ * heuristic or call `auth-status` to populate the cache".
40
+ * - Cache hit → for every required, non-automated field, checks
41
+ * presence in `entry.config`. Mirrors the `present || resolvable`
42
+ * check in `auth-status` but evaluates against current config.
43
+ * `automated` fields (e.g. dynamic OAuth client_id) count as
44
+ * satisfied even when absent — adk supplies them at call time.
45
+ *
46
+ * Returning `null` for cache miss is intentional. A boolean would
47
+ * force callers to choose a default that's wrong half the time;
48
+ * `null` lets them branch explicitly.
49
+ */
50
+ export function isRefAuthComplete(entry, cacheEntry) {
51
+ if (typeof entry === "string")
52
+ return false;
53
+ if (entry.mode === "proxy")
54
+ return true;
55
+ const authFields = cacheEntry?.authFields;
56
+ if (!authFields)
57
+ return null;
58
+ const config = entry.config ?? {};
59
+ for (const [field, info] of Object.entries(authFields)) {
60
+ if (!info.required)
61
+ continue;
62
+ if (info.automated)
63
+ continue;
64
+ if (!(field in config))
65
+ return false;
66
+ }
67
+ return true;
68
+ }
27
69
  // ============================================
28
70
  // Internal helpers
29
71
  // ============================================
@@ -253,6 +295,24 @@ export function createAdk(fs, options = {}) {
253
295
  cache.refs[name] = entry;
254
296
  await writeRegistryCache(cache);
255
297
  }
298
+ /**
299
+ * Merge `authFields` into an existing cache entry without clobbering
300
+ * description/tools, or create a minimal entry if one doesn't exist
301
+ * yet. Called from `authStatus` so the slim {required, automated}
302
+ * shape is always available for `isRefAuthComplete` to answer
303
+ * locally on subsequent calls.
304
+ */
305
+ async function upsertRegistryCacheAuthFields(name, ref, authFields) {
306
+ const cache = await readRegistryCache();
307
+ const existing = cache.refs[name];
308
+ cache.refs[name] = {
309
+ ...(existing ?? { ref, fetchedAt: new Date().toISOString() }),
310
+ authFields,
311
+ // Refresh fetchedAt so freshness telemetry stays accurate.
312
+ fetchedAt: new Date().toISOString(),
313
+ };
314
+ await writeRegistryCache(cache);
315
+ }
256
316
  async function removeRegistryCacheEntry(name) {
257
317
  const cache = await readRegistryCache();
258
318
  if (!(name in cache.refs))
@@ -1642,6 +1702,20 @@ export function createAdk(fs, options = {}) {
1642
1702
  };
1643
1703
  }
1644
1704
  const complete = Object.values(fields).every((f) => !f.required || f.present || f.resolvable);
1705
+ // Persist the slim {required, automated} per-field shape into the
1706
+ // registry cache so `isRefAuthComplete` can answer subsequent
1707
+ // host-side "is this ref ready?" checks without re-fetching the
1708
+ // security scheme. We deliberately omit `present`/`resolvable`
1709
+ // because those are computed against the current entry.config and
1710
+ // host environment — caching them would go stale immediately.
1711
+ const authFields = {};
1712
+ for (const [field, info] of Object.entries(fields)) {
1713
+ authFields[field] = {
1714
+ required: info.required,
1715
+ automated: info.automated,
1716
+ };
1717
+ }
1718
+ await upsertRegistryCacheAuthFields(name, entry.ref, authFields);
1645
1719
  return { name, security, complete, fields };
1646
1720
  },
1647
1721
  async auth(name, opts) {