@farmslot/recipe-cli 0.1.1 → 0.1.2
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/CHANGELOG.md +4 -0
- package/dist/action-catalog.d.ts +81 -0
- package/dist/action-catalog.d.ts.map +1 -0
- package/dist/action-catalog.js +195 -0
- package/dist/action-catalog.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/search.d.ts.map +1 -1
- package/dist/search.js +5 -33
- package/dist/search.js.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -6,6 +6,10 @@ All notable changes to `@farmslot/recipe-cli` are tracked here.
|
|
|
6
6
|
|
|
7
7
|
- Active-development baseline; add user-facing changes here before release or package publication.
|
|
8
8
|
|
|
9
|
+
## 0.1.2 - 2026-10-04
|
|
10
|
+
|
|
11
|
+
- Export the action catalog helpers a host CLI needs on top of its own action manifest: `actionCategory`, `fuzzyResolveActions`, `shortActionNames`, `searchActions`, `findRelatedActions`, `summarizeActionCategories`, `actionCapabilityMatrix`, `resolveActionCapabilityRefusal` and `missingActionCapabilities`. `search` ranks with the same scorer, so its results are unchanged.
|
|
12
|
+
|
|
9
13
|
## 0.1.1 - 2026-10-03
|
|
10
14
|
|
|
11
15
|
- Publish with recipe-harness 0.22.1 so `require('@farmslot/recipe-cli')` works from CommonJS.
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
/** The fields lookup and search rank an action on. */
|
|
2
|
+
export interface CatalogAction {
|
|
3
|
+
name: string;
|
|
4
|
+
/** Grouping label, e.g. from `actionCategory`. */
|
|
5
|
+
category: string;
|
|
6
|
+
/** Parameter names. */
|
|
7
|
+
fields: string[];
|
|
8
|
+
description: string;
|
|
9
|
+
}
|
|
10
|
+
export interface ActionCategorySummary {
|
|
11
|
+
name: string;
|
|
12
|
+
count: number;
|
|
13
|
+
}
|
|
14
|
+
export type ActionSupport = 'available' | 'unavailable';
|
|
15
|
+
/** One action across every adapter of a matrix. */
|
|
16
|
+
export interface ActionMatrixRow<Adapter extends string = string> {
|
|
17
|
+
name: string;
|
|
18
|
+
category: string;
|
|
19
|
+
description: string;
|
|
20
|
+
fields: string[];
|
|
21
|
+
support: Record<Adapter, ActionSupport>;
|
|
22
|
+
/** Adapters that provide the action, in matrix order. */
|
|
23
|
+
satisfyingAdapters: Adapter[];
|
|
24
|
+
}
|
|
25
|
+
export interface AdapterActionCatalog<Adapter extends string, Action extends CatalogAction> {
|
|
26
|
+
adapter: Adapter;
|
|
27
|
+
actions: readonly Action[];
|
|
28
|
+
}
|
|
29
|
+
/** An action the selected adapter lacks, with the adapters that provide it. */
|
|
30
|
+
export interface ActionCapabilityRefusal<Adapter extends string = string> {
|
|
31
|
+
capability: string;
|
|
32
|
+
satisfyingAdapters: Adapter[];
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Category of an action name. Official actions group by role (runtime, ui, assertion, evidence,
|
|
36
|
+
* control); a name under a vendor namespace (`metamask.perps.open`) groups by its second segment;
|
|
37
|
+
* any other dotted name groups by its first segment.
|
|
38
|
+
*/
|
|
39
|
+
export declare function actionCategory(name: string, namespaces?: readonly string[]): string;
|
|
40
|
+
/**
|
|
41
|
+
* Actions a name selects, by tier: exact full name, then exact final segment, then final-segment
|
|
42
|
+
* substring. Every match of the first non-empty tier is returned, so a short name that maps to
|
|
43
|
+
* several actions shows them all.
|
|
44
|
+
*/
|
|
45
|
+
export declare function fuzzyResolveActions<T extends {
|
|
46
|
+
name: string;
|
|
47
|
+
}>(entries: T[], query: string): T[];
|
|
48
|
+
/** Final segments that name exactly one action, keyed by full name; null when ambiguous. */
|
|
49
|
+
export declare function shortActionNames(names: readonly string[]): Map<string, string | null>;
|
|
50
|
+
/**
|
|
51
|
+
* Rank actions by name, category, parameter names and description; every query term must match.
|
|
52
|
+
* Ties sort by name.
|
|
53
|
+
*/
|
|
54
|
+
export declare function searchActions<T extends CatalogAction>(entries: T[], query: string): T[];
|
|
55
|
+
/** Score of one search term against one entry; 0 means no match. */
|
|
56
|
+
export declare function catalogTermScore(entry: CatalogAction, term: string): number;
|
|
57
|
+
/** Lowercase alphanumeric search terms. */
|
|
58
|
+
export declare function searchTerms(value: string): string[];
|
|
59
|
+
/** Up to `limit` other actions in the same category or sharing name terms, closest first. */
|
|
60
|
+
export declare function findRelatedActions<T extends {
|
|
61
|
+
name: string;
|
|
62
|
+
category: string;
|
|
63
|
+
}>(entries: T[], selected: T, limit?: number): string[];
|
|
64
|
+
/** Action count per category, sorted by category. */
|
|
65
|
+
export declare function summarizeActionCategories<T extends {
|
|
66
|
+
category: string;
|
|
67
|
+
}>(actions: T[]): ActionCategorySummary[];
|
|
68
|
+
/**
|
|
69
|
+
* One row per action across the given adapter catalogs (one catalog per adapter, in matrix
|
|
70
|
+
* order), sorted by name. Category comes from the first catalog that has the action, the
|
|
71
|
+
* description from the first non-empty one, and fields are the sorted union.
|
|
72
|
+
*/
|
|
73
|
+
export declare function actionCapabilityMatrix<Adapter extends string, Action extends CatalogAction>(catalogs: readonly AdapterActionCatalog<Adapter, Action>[]): ActionMatrixRow<Adapter>[];
|
|
74
|
+
/**
|
|
75
|
+
* Why an action name resolves nowhere for this adapter: it names exactly one matrix action that
|
|
76
|
+
* other adapters provide. Undefined when the name is unknown, ambiguous or already available.
|
|
77
|
+
*/
|
|
78
|
+
export declare function resolveActionCapabilityRefusal<Adapter extends string>(action: string, adapter: Adapter, matrix: ActionMatrixRow<Adapter>[]): ActionCapabilityRefusal<Adapter> | undefined;
|
|
79
|
+
/** Actions from the list that the matrix knows and this adapter lacks, each once. */
|
|
80
|
+
export declare function missingActionCapabilities<Adapter extends string>(adapter: Adapter, actionNames: readonly string[], matrix: ActionMatrixRow<Adapter>[]): ActionCapabilityRefusal<Adapter>[];
|
|
81
|
+
//# sourceMappingURL=action-catalog.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"action-catalog.d.ts","sourceRoot":"","sources":["../src/action-catalog.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
// Action catalog helpers for host CLIs. A host resolves its own action manifest (its policy decides
|
|
2
|
+
// which libraries and actions count) and uses these to look actions up, search, group and compare
|
|
3
|
+
// them across platform adapters, so every front door ranks and resolves actions the same way.
|
|
4
|
+
import { levenshtein } from './discovery-index.js';
|
|
5
|
+
const GENERIC_OPERATION_TERMS = new Set([
|
|
6
|
+
'assert',
|
|
7
|
+
'call',
|
|
8
|
+
'close',
|
|
9
|
+
'ensure',
|
|
10
|
+
'place',
|
|
11
|
+
'read',
|
|
12
|
+
'start',
|
|
13
|
+
'teardown',
|
|
14
|
+
]);
|
|
15
|
+
/**
|
|
16
|
+
* Category of an action name. Official actions group by role (runtime, ui, assertion, evidence,
|
|
17
|
+
* control); a name under a vendor namespace (`metamask.perps.open`) groups by its second segment;
|
|
18
|
+
* any other dotted name groups by its first segment.
|
|
19
|
+
*/
|
|
20
|
+
export function actionCategory(name, namespaces = []) {
|
|
21
|
+
const segments = name.split('.');
|
|
22
|
+
if (namespaces.includes(segments[0]) && segments.length > 2)
|
|
23
|
+
return segments[1] ?? segments[0];
|
|
24
|
+
if (segments[0] === 'app' || segments[0] === 'cdp')
|
|
25
|
+
return 'runtime';
|
|
26
|
+
if (segments[0] === 'ui')
|
|
27
|
+
return 'ui';
|
|
28
|
+
if (name.startsWith('assert_'))
|
|
29
|
+
return 'assertion';
|
|
30
|
+
if (name === 'watch_logs' || name === 'index_artifacts')
|
|
31
|
+
return 'evidence';
|
|
32
|
+
if (name === 'command' || name === 'wait' || name === 'call' || name === 'end')
|
|
33
|
+
return 'control';
|
|
34
|
+
return segments.length > 1 ? segments[0] || 'utility' : 'utility';
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Actions a name selects, by tier: exact full name, then exact final segment, then final-segment
|
|
38
|
+
* substring. Every match of the first non-empty tier is returned, so a short name that maps to
|
|
39
|
+
* several actions shows them all.
|
|
40
|
+
*/
|
|
41
|
+
export function fuzzyResolveActions(entries, query) {
|
|
42
|
+
const exactFull = entries.filter((entry) => entry.name === query);
|
|
43
|
+
if (exactFull.length > 0)
|
|
44
|
+
return exactFull;
|
|
45
|
+
const exactSegment = entries.filter((entry) => finalSegment(entry.name) === query);
|
|
46
|
+
if (exactSegment.length > 0)
|
|
47
|
+
return exactSegment;
|
|
48
|
+
return entries.filter((entry) => finalSegment(entry.name).includes(query));
|
|
49
|
+
}
|
|
50
|
+
/** Final segments that name exactly one action, keyed by full name; null when ambiguous. */
|
|
51
|
+
export function shortActionNames(names) {
|
|
52
|
+
const counts = new Map();
|
|
53
|
+
for (const name of names) {
|
|
54
|
+
const short = finalSegment(name);
|
|
55
|
+
counts.set(short, (counts.get(short) ?? 0) + 1);
|
|
56
|
+
}
|
|
57
|
+
return new Map(names.map((name) => {
|
|
58
|
+
const short = finalSegment(name);
|
|
59
|
+
return [name, counts.get(short) === 1 ? short : null];
|
|
60
|
+
}));
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Rank actions by name, category, parameter names and description; every query term must match.
|
|
64
|
+
* Ties sort by name.
|
|
65
|
+
*/
|
|
66
|
+
export function searchActions(entries, query) {
|
|
67
|
+
const terms = searchTerms(query);
|
|
68
|
+
if (terms.length === 0)
|
|
69
|
+
return [];
|
|
70
|
+
return entries
|
|
71
|
+
.map((entry) => {
|
|
72
|
+
const scores = terms.map((term) => catalogTermScore(entry, term));
|
|
73
|
+
return { entry, scores, score: scores.reduce((total, value) => total + value, 0) };
|
|
74
|
+
})
|
|
75
|
+
.filter(({ score, scores }) => score > 0 && scores.every((value) => value > 0))
|
|
76
|
+
.sort((left, right) => right.score - left.score || left.entry.name.localeCompare(right.entry.name))
|
|
77
|
+
.map(({ entry }) => entry);
|
|
78
|
+
}
|
|
79
|
+
/** Score of one search term against one entry; 0 means no match. */
|
|
80
|
+
export function catalogTermScore(entry, term) {
|
|
81
|
+
const name = entry.name.toLowerCase();
|
|
82
|
+
const segment = finalSegment(name);
|
|
83
|
+
const nameTerms = searchTerms(name.replaceAll('.', ' ').replaceAll('_', ' '));
|
|
84
|
+
const fields = entry.fields.map((field) => field.toLowerCase());
|
|
85
|
+
const description = entry.description.toLowerCase();
|
|
86
|
+
if (name === term)
|
|
87
|
+
return 120;
|
|
88
|
+
if (segment === term)
|
|
89
|
+
return 110;
|
|
90
|
+
if (entry.category === term)
|
|
91
|
+
return 100;
|
|
92
|
+
if (fields.includes(term))
|
|
93
|
+
return 90;
|
|
94
|
+
if (nameTerms.includes(term))
|
|
95
|
+
return 80;
|
|
96
|
+
if (name.includes(term))
|
|
97
|
+
return 70;
|
|
98
|
+
if (fields.some((field) => field.includes(term)))
|
|
99
|
+
return 60;
|
|
100
|
+
if (description.includes(term))
|
|
101
|
+
return 50;
|
|
102
|
+
if ([...nameTerms, ...fields].some((candidate) => fuzzyTermMatch(term, candidate)))
|
|
103
|
+
return 40;
|
|
104
|
+
return 0;
|
|
105
|
+
}
|
|
106
|
+
/** Lowercase alphanumeric search terms. */
|
|
107
|
+
export function searchTerms(value) {
|
|
108
|
+
return value.toLowerCase().match(/[a-z0-9]+/gu) ?? [];
|
|
109
|
+
}
|
|
110
|
+
/** Up to `limit` other actions in the same category or sharing name terms, closest first. */
|
|
111
|
+
export function findRelatedActions(entries, selected, limit = 5) {
|
|
112
|
+
const selectedNameTerms = searchTerms(finalSegment(selected.name).replaceAll('_', ' '));
|
|
113
|
+
return entries
|
|
114
|
+
.filter((entry) => entry.name !== selected.name)
|
|
115
|
+
.map((entry) => {
|
|
116
|
+
const nameTerms = new Set(searchTerms(finalSegment(entry.name).replaceAll('_', ' ')));
|
|
117
|
+
const sharedScore = selectedNameTerms
|
|
118
|
+
.filter((term) => nameTerms.has(term))
|
|
119
|
+
.reduce((score, term) => score + (GENERIC_OPERATION_TERMS.has(term) ? 5 : 30), 0);
|
|
120
|
+
const score = (entry.category === selected.category ? 100 : 0) + sharedScore;
|
|
121
|
+
return { name: entry.name, score };
|
|
122
|
+
})
|
|
123
|
+
.filter(({ score }) => score > 0)
|
|
124
|
+
.sort((left, right) => right.score - left.score || left.name.localeCompare(right.name))
|
|
125
|
+
.slice(0, limit)
|
|
126
|
+
.map(({ name }) => name);
|
|
127
|
+
}
|
|
128
|
+
/** Action count per category, sorted by category. */
|
|
129
|
+
export function summarizeActionCategories(actions) {
|
|
130
|
+
const counts = new Map();
|
|
131
|
+
for (const action of actions)
|
|
132
|
+
counts.set(action.category, (counts.get(action.category) ?? 0) + 1);
|
|
133
|
+
return [...counts.entries()]
|
|
134
|
+
.map(([name, count]) => ({ name, count }))
|
|
135
|
+
.sort((left, right) => left.name.localeCompare(right.name));
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* One row per action across the given adapter catalogs (one catalog per adapter, in matrix
|
|
139
|
+
* order), sorted by name. Category comes from the first catalog that has the action, the
|
|
140
|
+
* description from the first non-empty one, and fields are the sorted union.
|
|
141
|
+
*/
|
|
142
|
+
export function actionCapabilityMatrix(catalogs) {
|
|
143
|
+
const adapters = catalogs.map((catalog) => catalog.adapter);
|
|
144
|
+
const actions = new Map();
|
|
145
|
+
for (const catalog of catalogs) {
|
|
146
|
+
for (const action of catalog.actions) {
|
|
147
|
+
const entry = actions.get(action.name) ?? { entries: [], adapters: new Set() };
|
|
148
|
+
entry.entries.push(action);
|
|
149
|
+
entry.adapters.add(catalog.adapter);
|
|
150
|
+
actions.set(action.name, entry);
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
return [...actions.entries()]
|
|
154
|
+
.map(([name, entry]) => ({
|
|
155
|
+
name,
|
|
156
|
+
category: entry.entries[0].category,
|
|
157
|
+
description: entry.entries.map((action) => action.description).find(Boolean) ?? '',
|
|
158
|
+
fields: [...new Set(entry.entries.flatMap((action) => action.fields))].sort(),
|
|
159
|
+
support: Object.fromEntries(adapters.map((adapter) => [
|
|
160
|
+
adapter,
|
|
161
|
+
entry.adapters.has(adapter) ? 'available' : 'unavailable',
|
|
162
|
+
])),
|
|
163
|
+
satisfyingAdapters: adapters.filter((adapter) => entry.adapters.has(adapter)),
|
|
164
|
+
}))
|
|
165
|
+
.sort((left, right) => left.name.localeCompare(right.name));
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Why an action name resolves nowhere for this adapter: it names exactly one matrix action that
|
|
169
|
+
* other adapters provide. Undefined when the name is unknown, ambiguous or already available.
|
|
170
|
+
*/
|
|
171
|
+
export function resolveActionCapabilityRefusal(action, adapter, matrix) {
|
|
172
|
+
const matches = fuzzyResolveActions(matrix, action);
|
|
173
|
+
if (matches.length !== 1 || matches[0].satisfyingAdapters.includes(adapter))
|
|
174
|
+
return undefined;
|
|
175
|
+
return { capability: matches[0].name, satisfyingAdapters: matches[0].satisfyingAdapters };
|
|
176
|
+
}
|
|
177
|
+
/** Actions from the list that the matrix knows and this adapter lacks, each once. */
|
|
178
|
+
export function missingActionCapabilities(adapter, actionNames, matrix) {
|
|
179
|
+
return [...new Set(actionNames)].flatMap((action) => {
|
|
180
|
+
const row = matrix.find((entry) => entry.name === action);
|
|
181
|
+
if (!row || row.satisfyingAdapters.includes(adapter))
|
|
182
|
+
return [];
|
|
183
|
+
return [{ capability: row.name, satisfyingAdapters: row.satisfyingAdapters }];
|
|
184
|
+
});
|
|
185
|
+
}
|
|
186
|
+
function fuzzyTermMatch(term, candidate) {
|
|
187
|
+
if (term.length < 4 || candidate.length < 4)
|
|
188
|
+
return false;
|
|
189
|
+
const threshold = Math.max(1, Math.floor(Math.max(term.length, candidate.length) / 4));
|
|
190
|
+
return levenshtein(term, candidate) <= threshold;
|
|
191
|
+
}
|
|
192
|
+
function finalSegment(name) {
|
|
193
|
+
return name.split('.').pop() ?? name;
|
|
194
|
+
}
|
|
195
|
+
//# sourceMappingURL=action-catalog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"action-catalog.js","sourceRoot":"","sources":["../src/action-catalog.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
export { actionCapabilityMatrix, type ActionCapabilityRefusal, actionCategory, type ActionCategorySummary, type ActionMatrixRow, type ActionSupport, type AdapterActionCatalog, type CatalogAction, findRelatedActions, fuzzyResolveActions, missingActionCapabilities, resolveActionCapabilityRefusal, searchActions, shortActionNames, summarizeActionCategories, } from './action-catalog.js';
|
|
1
2
|
export { createRecipeCliProgram, type RecipeCliOptions, runRecipeCli } from './cli.js';
|
|
2
3
|
export { type DiscoveryCommandContext, registerDiscoveryCommands } from './commands.js';
|
|
3
4
|
export { explainRecipe, type RecipeComposition, recipeComposition } from './composition.js';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,KAAK,gBAAgB,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AACvF,OAAO,EAAE,KAAK,uBAAuB,EAAE,yBAAyB,EAAE,MAAM,eAAe,CAAC;AACxF,OAAO,EAAE,aAAa,EAAE,KAAK,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAC5F,OAAO,EAAE,cAAc,EAAE,KAAK,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC/E,OAAO,EACL,YAAY,EACZ,mBAAmB,EACnB,KAAK,gBAAgB,EACrB,UAAU,EACV,KAAK,aAAa,EAClB,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,GACzB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,KAAK,uBAAuB,EAC5B,gBAAgB,EAChB,KAAK,wBAAwB,EAC7B,yBAAyB,GAC1B,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,mBAAmB,YAAY,CAAC;AAChC,OAAO,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAC;AACtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,sBAAsB,EACtB,KAAK,uBAAuB,EAC5B,cAAc,EACd,KAAK,qBAAqB,EAC1B,KAAK,eAAe,EACpB,KAAK,aAAa,EAClB,KAAK,oBAAoB,EACzB,KAAK,aAAa,EAClB,kBAAkB,EAClB,mBAAmB,EACnB,yBAAyB,EACzB,8BAA8B,EAC9B,aAAa,EACb,gBAAgB,EAChB,yBAAyB,GAC1B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,sBAAsB,EAAE,KAAK,gBAAgB,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AACvF,OAAO,EAAE,KAAK,uBAAuB,EAAE,yBAAyB,EAAE,MAAM,eAAe,CAAC;AACxF,OAAO,EAAE,aAAa,EAAE,KAAK,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAC5F,OAAO,EAAE,cAAc,EAAE,KAAK,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC/E,OAAO,EACL,YAAY,EACZ,mBAAmB,EACnB,KAAK,gBAAgB,EACrB,UAAU,EACV,KAAK,aAAa,EAClB,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,GACzB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,KAAK,uBAAuB,EAC5B,gBAAgB,EAChB,KAAK,wBAAwB,EAC7B,yBAAyB,GAC1B,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,mBAAmB,YAAY,CAAC;AAChC,OAAO,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAC;AACtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
export { actionCapabilityMatrix, actionCategory, findRelatedActions, fuzzyResolveActions, missingActionCapabilities, resolveActionCapabilityRefusal, searchActions, shortActionNames, summarizeActionCategories, } from './action-catalog.js';
|
|
1
2
|
export { createRecipeCliProgram, runRecipeCli } from './cli.js';
|
|
2
3
|
export { registerDiscoveryCommands } from './commands.js';
|
|
3
4
|
export { explainRecipe, recipeComposition } from './composition.js';
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAyB,YAAY,EAAE,MAAM,UAAU,CAAC;AACvF,OAAO,EAAgC,yBAAyB,EAAE,MAAM,eAAe,CAAC;AACxF,OAAO,EAAE,aAAa,EAA0B,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAC5F,OAAO,EAAE,cAAc,EAA2B,MAAM,sBAAsB,CAAC;AAC/E,OAAO,EACL,YAAY,EACZ,mBAAmB,EAEnB,UAAU,GAIX,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAEL,gBAAgB,EAEhB,yBAAyB,GAC1B,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C,OAAO,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAC;AACtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,sBAAsB,EAEtB,cAAc,EAMd,kBAAkB,EAClB,mBAAmB,EACnB,yBAAyB,EACzB,8BAA8B,EAC9B,aAAa,EACb,gBAAgB,EAChB,yBAAyB,GAC1B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,sBAAsB,EAAyB,YAAY,EAAE,MAAM,UAAU,CAAC;AACvF,OAAO,EAAgC,yBAAyB,EAAE,MAAM,eAAe,CAAC;AACxF,OAAO,EAAE,aAAa,EAA0B,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAC5F,OAAO,EAAE,cAAc,EAA2B,MAAM,sBAAsB,CAAC;AAC/E,OAAO,EACL,YAAY,EACZ,mBAAmB,EAEnB,UAAU,GAIX,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAEL,gBAAgB,EAEhB,yBAAyB,GAC1B,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C,OAAO,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAC;AACtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC"}
|
package/dist/search.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../src/search.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../src/search.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAGtE,OAAO,EAAE,KAAK,oBAAoB,EAAiB,MAAM,sBAAsB,CAAC;AAChF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAY/C,8FAA8F;AAC9F,wBAAgB,WAAW,CACzB,KAAK,EAAE,oBAAoB,EAC3B,KAAK,EAAE,MAAM;AACb,0EAA0E;AAC1E,QAAQ,GAAE,SAAS,qBAAqB,EAAO,GAC9C,YAAY,EAAE,CAwDhB"}
|
package/dist/search.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { catalogTermScore, searchTerms } from './action-catalog.js';
|
|
2
|
+
import { recipeSummary } from './discovery-index.js';
|
|
2
3
|
/** Rank actions and recipes by id, parameter names and description; every term must match. */
|
|
3
4
|
export function searchIndex(index, query,
|
|
4
5
|
/** Shadowed library recipes, searchable by their `<library>.<ref>` id. */
|
|
@@ -54,37 +55,8 @@ shadowed = []) {
|
|
|
54
55
|
}
|
|
55
56
|
function termScore(label, entry, term) {
|
|
56
57
|
const name = label.toLowerCase();
|
|
57
|
-
|
|
58
|
-
const
|
|
59
|
-
|
|
60
|
-
const fields = entry.fields.map((field) => field.toLowerCase());
|
|
61
|
-
if (name === term)
|
|
62
|
-
return 120;
|
|
63
|
-
if (segment === term)
|
|
64
|
-
return 110;
|
|
65
|
-
if (domain === term)
|
|
66
|
-
return 100;
|
|
67
|
-
if (fields.includes(term))
|
|
68
|
-
return 90;
|
|
69
|
-
if (nameTerms.includes(term))
|
|
70
|
-
return 80;
|
|
71
|
-
if (name.includes(term))
|
|
72
|
-
return 70;
|
|
73
|
-
if (fields.some((field) => field.includes(term)))
|
|
74
|
-
return 60;
|
|
75
|
-
if (entry.description.toLowerCase().includes(term))
|
|
76
|
-
return 50;
|
|
77
|
-
if ([...nameTerms, ...fields].some((candidate) => fuzzyMatch(term, candidate)))
|
|
78
|
-
return 40;
|
|
79
|
-
return 0;
|
|
80
|
-
}
|
|
81
|
-
function fuzzyMatch(term, candidate) {
|
|
82
|
-
if (term.length < 4 || candidate.length < 4)
|
|
83
|
-
return false;
|
|
84
|
-
const threshold = Math.max(1, Math.floor(Math.max(term.length, candidate.length) / 4));
|
|
85
|
-
return levenshtein(term, candidate) <= threshold;
|
|
86
|
-
}
|
|
87
|
-
function searchTerms(value) {
|
|
88
|
-
return value.toLowerCase().match(/[a-z0-9]+/gu) ?? [];
|
|
58
|
+
// A recipe or action id ranks its first segment (its domain) like a category.
|
|
59
|
+
const category = name.includes('.') ? name.split('.')[0] : '';
|
|
60
|
+
return catalogTermScore({ name, category, fields: entry.fields, description: entry.description }, term);
|
|
89
61
|
}
|
|
90
62
|
//# sourceMappingURL=search.js.map
|
package/dist/search.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search.js","sourceRoot":"","sources":["../src/search.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAA6B,aAAa,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"search.js","sourceRoot":"","sources":["../src/search.ts"],"names":[],"mappings":"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"}
|