greprag 5.49.6 → 5.49.9
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/commands/collision-reminder.d.ts +14 -0
- package/dist/commands/collision-reminder.js +40 -0
- package/dist/commands/collision-reminder.js.map +1 -0
- package/dist/commands/coordinate-gate.d.ts +12 -6
- package/dist/commands/coordinate-gate.js +24 -10
- package/dist/commands/coordinate-gate.js.map +1 -1
- package/dist/commands/corpus/client.d.ts +5 -1
- package/dist/commands/corpus/client.js +10 -3
- package/dist/commands/corpus/client.js.map +1 -1
- package/dist/commands/corpus/index.js +21 -1
- package/dist/commands/corpus/index.js.map +1 -1
- package/dist/commands/corpus/manage.js +31 -5
- package/dist/commands/corpus/manage.js.map +1 -1
- package/dist/commands/corpus/search.js +13 -6
- package/dist/commands/corpus/search.js.map +1 -1
- package/dist/commands/corpus/status.js +2 -1
- package/dist/commands/corpus/status.js.map +1 -1
- package/dist/commands/corpus/tags.d.ts +17 -0
- package/dist/commands/corpus/tags.js +91 -0
- package/dist/commands/corpus/tags.js.map +1 -0
- package/dist/commands/corpus-reminder.d.ts +15 -0
- package/dist/commands/corpus-reminder.js +34 -0
- package/dist/commands/corpus-reminder.js.map +1 -0
- package/dist/commands/friction-reminder.d.ts +22 -44
- package/dist/commands/friction-reminder.js +45 -63
- package/dist/commands/friction-reminder.js.map +1 -1
- package/dist/commands/init.js +7 -14
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/load-primer-reminder.d.ts +28 -0
- package/dist/commands/load-primer-reminder.js +51 -0
- package/dist/commands/load-primer-reminder.js.map +1 -0
- package/dist/commands/load.d.ts +15 -0
- package/dist/commands/load.js +112 -0
- package/dist/commands/load.js.map +1 -0
- package/dist/commands/memory-reflex.d.ts +17 -112
- package/dist/commands/memory-reflex.js +24 -233
- package/dist/commands/memory-reflex.js.map +1 -1
- package/dist/commands/reminder-registry.d.ts +12 -1
- package/dist/commands/reminder-registry.js +48 -4
- package/dist/commands/reminder-registry.js.map +1 -1
- package/dist/commands/reminder-types.d.ts +33 -0
- package/dist/commands/version-reminder.d.ts +15 -0
- package/dist/commands/version-reminder.js +34 -0
- package/dist/commands/version-reminder.js.map +1 -0
- package/dist/hook.js +134 -274
- package/dist/hook.js.map +1 -1
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/skill/templates/chip-leader.md +188 -0
- package/skill/templates/chip-spawn.md +4 -4
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/** collision-reminder — the coordinate gate as a registry MATCH(command) module
|
|
2
|
+
* (docs/reminder-interrupt.md — the landed map). The first `source: 'command'`
|
|
3
|
+
* reminder: it reads `env.toolCommand` (the Bash command about to run, populated
|
|
4
|
+
* only at PreToolUse), matches it against the risky shared-state signatures, and
|
|
5
|
+
* fires the coordinate directive IF a same-repo peer is live.
|
|
6
|
+
*
|
|
7
|
+
* PURE, like every module: the hot-path I/O (the fresh watcher read → live peers)
|
|
8
|
+
* stays in the hook, which passes the result as `env.collisionPeers`. This module
|
|
9
|
+
* only classifies the command (pure) + formats the directive — reusing the proven
|
|
10
|
+
* `classifyRiskyCommand` / `buildCoordinateDirective` from coordinate-gate.ts. So
|
|
11
|
+
* the standalone PreToolUse coordinate-gate control point is folded into the one
|
|
12
|
+
* registry `detect(env)` path. */
|
|
13
|
+
import { ReminderModule } from './reminder-types';
|
|
14
|
+
export declare const collisionMatchModule: ReminderModule;
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/** collision-reminder — the coordinate gate as a registry MATCH(command) module
|
|
3
|
+
* (docs/reminder-interrupt.md — the landed map). The first `source: 'command'`
|
|
4
|
+
* reminder: it reads `env.toolCommand` (the Bash command about to run, populated
|
|
5
|
+
* only at PreToolUse), matches it against the risky shared-state signatures, and
|
|
6
|
+
* fires the coordinate directive IF a same-repo peer is live.
|
|
7
|
+
*
|
|
8
|
+
* PURE, like every module: the hot-path I/O (the fresh watcher read → live peers)
|
|
9
|
+
* stays in the hook, which passes the result as `env.collisionPeers`. This module
|
|
10
|
+
* only classifies the command (pure) + formats the directive — reusing the proven
|
|
11
|
+
* `classifyRiskyCommand` / `buildCoordinateDirective` from coordinate-gate.ts. So
|
|
12
|
+
* the standalone PreToolUse coordinate-gate control point is folded into the one
|
|
13
|
+
* registry `detect(env)` path. */
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.collisionMatchModule = void 0;
|
|
16
|
+
const coordinate_gate_1 = require("./coordinate-gate");
|
|
17
|
+
exports.collisionMatchModule = {
|
|
18
|
+
id: 'collision',
|
|
19
|
+
source: 'command',
|
|
20
|
+
// Fire only when: there is a command, it is a risky shared-state action, AND a
|
|
21
|
+
// same-repo peer is live. Any miss → silent (the action proceeds ungated).
|
|
22
|
+
detect: (env) => {
|
|
23
|
+
if (!env.toolCommand)
|
|
24
|
+
return { tier: 'silent' };
|
|
25
|
+
if (!(0, coordinate_gate_1.classifyRiskyCommand)(env.toolCommand))
|
|
26
|
+
return { tier: 'silent' };
|
|
27
|
+
if (!env.collisionPeers || env.collisionPeers.length === 0)
|
|
28
|
+
return { tier: 'silent' };
|
|
29
|
+
return { tier: 'nag' };
|
|
30
|
+
},
|
|
31
|
+
announce: () => null,
|
|
32
|
+
reminder: (_d, env) => {
|
|
33
|
+
const trigger = env.toolCommand ? (0, coordinate_gate_1.classifyRiskyCommand)(env.toolCommand) : null;
|
|
34
|
+
const peers = env.collisionPeers ?? [];
|
|
35
|
+
if (!trigger || peers.length === 0)
|
|
36
|
+
return null;
|
|
37
|
+
return (0, coordinate_gate_1.buildCoordinateDirective)(trigger, peers, env.short, env.alias ?? null);
|
|
38
|
+
},
|
|
39
|
+
};
|
|
40
|
+
//# sourceMappingURL=collision-reminder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"collision-reminder.js","sourceRoot":"","sources":["../../src/commands/collision-reminder.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;mCAWmC;;;AAGnC,uDAAmF;AAEtE,QAAA,oBAAoB,GAAmB;IAClD,EAAE,EAAE,WAAW;IACf,MAAM,EAAE,SAAS;IACjB,+EAA+E;IAC/E,2EAA2E;IAC3E,MAAM,EAAE,CAAC,GAAgB,EAAa,EAAE;QACtC,IAAI,CAAC,GAAG,CAAC,WAAW;YAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;QAChD,IAAI,CAAC,IAAA,sCAAoB,EAAC,GAAG,CAAC,WAAW,CAAC;YAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;QACtE,IAAI,CAAC,GAAG,CAAC,cAAc,IAAI,GAAG,CAAC,cAAc,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;QACtF,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;IACzB,CAAC;IACD,QAAQ,EAAE,GAAG,EAAE,CAAC,IAAI;IACpB,QAAQ,EAAE,CAAC,EAAE,EAAE,GAAgB,EAAiB,EAAE;QAChD,MAAM,OAAO,GAAG,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,IAAA,sCAAoB,EAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAC/E,MAAM,KAAK,GAAG,GAAG,CAAC,cAAc,IAAI,EAAE,CAAC;QACvC,IAAI,CAAC,OAAO,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QAChD,OAAO,IAAA,0CAAwB,EAAC,OAAO,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC;IAChF,CAAC;CACF,CAAC"}
|
|
@@ -56,7 +56,9 @@ export declare function triggerFromPreToolUse(toolName: string, toolInput: Recor
|
|
|
56
56
|
/** The LOUD coordinate directive — names the action + the live same-repo peers
|
|
57
57
|
* and tells the agent to message them BEFORE proceeding. PURE, source-agnostic
|
|
58
58
|
* (takes a CoordinateTrigger, not a PreToolUse event). */
|
|
59
|
-
export declare function buildCoordinateDirective(trigger: CoordinateTrigger, peers:
|
|
59
|
+
export declare function buildCoordinateDirective(trigger: CoordinateTrigger, peers: Array<{
|
|
60
|
+
short: string;
|
|
61
|
+
}>, myShort: string, alias: string | null): string;
|
|
60
62
|
export interface CoordinateGateOptions {
|
|
61
63
|
short: string;
|
|
62
64
|
projectId: string | null;
|
|
@@ -65,9 +67,13 @@ export interface CoordinateGateOptions {
|
|
|
65
67
|
apiKey: string;
|
|
66
68
|
alias: string | null;
|
|
67
69
|
}
|
|
68
|
-
/**
|
|
69
|
-
*
|
|
70
|
-
*
|
|
71
|
-
*
|
|
72
|
-
|
|
70
|
+
/** FRESH watcher read → the same-repo peers live right now (the I/O half, kept out
|
|
71
|
+
* of the pure module). NO dedup, NO local state: a fresh read every call. Empty on
|
|
72
|
+
* any failure / no peer (fail-open). The collision Match-on-command module
|
|
73
|
+
* (collision-reminder.ts) calls this in the hook, then detects purely on the result. */
|
|
74
|
+
export declare function resolveCollisionPeers(opts: CoordinateGateOptions): Promise<CollisionPeer[]>;
|
|
75
|
+
/** Source-agnostic eval+message. Given a trigger from ANY source, resolve live
|
|
76
|
+
* same-repo peers and return the LOUD directive — or null if none. Retained for
|
|
77
|
+
* the existing PreToolUse path + tests; the registry now reaches the same result
|
|
78
|
+
* via resolveCollisionPeers + the collision module. */
|
|
73
79
|
export declare function runCoordinateGate(trigger: CoordinateTrigger, opts: CoordinateGateOptions): Promise<string | null>;
|
|
@@ -40,13 +40,16 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
40
40
|
exports.classifyRiskyCommand = classifyRiskyCommand;
|
|
41
41
|
exports.triggerFromPreToolUse = triggerFromPreToolUse;
|
|
42
42
|
exports.buildCoordinateDirective = buildCoordinateDirective;
|
|
43
|
+
exports.resolveCollisionPeers = resolveCollisionPeers;
|
|
43
44
|
exports.runCoordinateGate = runCoordinateGate;
|
|
44
45
|
const collision_check_1 = require("./collision-check");
|
|
45
46
|
/** Risky shared-state command signatures. Each segment of a (possibly chained)
|
|
46
47
|
* Bash command is tested against these. SPECIFIC to the Bash/PreToolUse source. */
|
|
47
48
|
const RISKY_PATTERNS = [
|
|
48
49
|
{ kind: 'merge', label: 'git merge', re: /^git\s+merge\b/ },
|
|
49
|
-
{ kind: '
|
|
50
|
+
{ kind: 'merge', label: 'git rebase', re: /^git\s+rebase\b/ }, // rewrites shared history
|
|
51
|
+
{ kind: 'merge', label: 'gh pr merge', re: /^gh\s+pr\s+merge\b/ },
|
|
52
|
+
{ kind: 'push', label: 'git push', re: /^git\s+push\b/ }, // incl. --force
|
|
50
53
|
{ kind: 'deploy', label: 'wrangler deploy', re: /^(?:npx\s+)?wrangler\s+deploy\b/ },
|
|
51
54
|
{ kind: 'deploy', label: 'npm run deploy', re: /^npm\s+run\s+deploy\b/ },
|
|
52
55
|
{ kind: 'deploy', label: 'npm publish', re: /^npm\s+publish\b/ },
|
|
@@ -91,16 +94,27 @@ function buildCoordinateDirective(trigger, peers, myShort, alias) {
|
|
|
91
94
|
+ `Ping before proceeding — greprag send "heads up, about to ${trigger.label}" `
|
|
92
95
|
+ `--to ${handle}@greprag.com/<8hex> --from-session ${myShort}`);
|
|
93
96
|
}
|
|
94
|
-
/**
|
|
95
|
-
*
|
|
96
|
-
*
|
|
97
|
-
*
|
|
98
|
-
|
|
97
|
+
/** FRESH watcher read → the same-repo peers live right now (the I/O half, kept out
|
|
98
|
+
* of the pure module). NO dedup, NO local state: a fresh read every call. Empty on
|
|
99
|
+
* any failure / no peer (fail-open). The collision Match-on-command module
|
|
100
|
+
* (collision-reminder.ts) calls this in the hook, then detects purely on the result. */
|
|
101
|
+
async function resolveCollisionPeers(opts) {
|
|
102
|
+
try {
|
|
103
|
+
const watchers = await (0, collision_check_1.fetchTenantWatchers)(opts.apiUrl, opts.apiKey);
|
|
104
|
+
if (watchers.length === 0)
|
|
105
|
+
return [];
|
|
106
|
+
return (0, collision_check_1.detectCollisions)(opts.short, opts.projectId, opts.projectName, watchers);
|
|
107
|
+
}
|
|
108
|
+
catch {
|
|
109
|
+
return [];
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
/** Source-agnostic eval+message. Given a trigger from ANY source, resolve live
|
|
113
|
+
* same-repo peers and return the LOUD directive — or null if none. Retained for
|
|
114
|
+
* the existing PreToolUse path + tests; the registry now reaches the same result
|
|
115
|
+
* via resolveCollisionPeers + the collision module. */
|
|
99
116
|
async function runCoordinateGate(trigger, opts) {
|
|
100
|
-
const
|
|
101
|
-
if (watchers.length === 0)
|
|
102
|
-
return null;
|
|
103
|
-
const peers = (0, collision_check_1.detectCollisions)(opts.short, opts.projectId, opts.projectName, watchers);
|
|
117
|
+
const peers = await resolveCollisionPeers(opts);
|
|
104
118
|
if (peers.length === 0)
|
|
105
119
|
return null;
|
|
106
120
|
return buildCoordinateDirective(trigger, peers, opts.short, opts.alias);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"coordinate-gate.js","sourceRoot":"","sources":["../../src/commands/coordinate-gate.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iFAoCiF;;
|
|
1
|
+
{"version":3,"file":"coordinate-gate.js","sourceRoot":"","sources":["../../src/commands/coordinate-gate.ts"],"names":[],"mappings":"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"}
|
|
@@ -18,15 +18,19 @@ export declare function getConfig(): Cfg;
|
|
|
18
18
|
export declare function abortNotConfigured(): never;
|
|
19
19
|
export declare function apiCall<T>(url: string, apiKey: string, body: Record<string, unknown>): Promise<T>;
|
|
20
20
|
export declare function apiGet<T>(url: string, apiKey: string): Promise<T>;
|
|
21
|
-
export declare function apiDelete<T>(url: string, apiKey: string): Promise<T>;
|
|
21
|
+
export declare function apiDelete<T>(url: string, apiKey: string, body?: Record<string, unknown>): Promise<T>;
|
|
22
22
|
export interface StoreSummary {
|
|
23
23
|
id: string;
|
|
24
24
|
kind: string;
|
|
25
25
|
name: string;
|
|
26
|
+
tags?: string[];
|
|
26
27
|
nodeCount: number;
|
|
27
28
|
wordCount: number;
|
|
28
29
|
createdAt: string;
|
|
29
30
|
}
|
|
31
|
+
/** Internal store kinds — engine plumbing, NOT user corpora. Hidden from the
|
|
32
|
+
* default `corpus list`; shown with --all or an explicit --kind. adr: adr/corpus-tags.md */
|
|
33
|
+
export declare const INTERNAL_KINDS: readonly ["memory", "fix", "inbox"];
|
|
30
34
|
export interface QueryNode {
|
|
31
35
|
id: string;
|
|
32
36
|
nodeId: string;
|
|
@@ -41,7 +41,7 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
41
41
|
};
|
|
42
42
|
})();
|
|
43
43
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
44
|
-
exports.VALID_KINDS = exports.UUID_RE = exports.API_URL_DEFAULT = void 0;
|
|
44
|
+
exports.INTERNAL_KINDS = exports.VALID_KINDS = exports.UUID_RE = exports.API_URL_DEFAULT = void 0;
|
|
45
45
|
exports.getConfig = getConfig;
|
|
46
46
|
exports.abortNotConfigured = abortNotConfigured;
|
|
47
47
|
exports.apiCall = apiCall;
|
|
@@ -117,15 +117,22 @@ async function apiGet(url, apiKey) {
|
|
|
117
117
|
throw new Error(`API ${res.status}: ${await res.text()}`);
|
|
118
118
|
return res.json();
|
|
119
119
|
}
|
|
120
|
-
async function apiDelete(url, apiKey) {
|
|
120
|
+
async function apiDelete(url, apiKey, body) {
|
|
121
121
|
const res = await fetch(url, {
|
|
122
122
|
method: 'DELETE',
|
|
123
|
-
headers: {
|
|
123
|
+
headers: {
|
|
124
|
+
'Authorization': `Bearer ${apiKey}`,
|
|
125
|
+
...(body ? { 'Content-Type': 'application/json' } : {}),
|
|
126
|
+
},
|
|
127
|
+
...(body ? { body: JSON.stringify(body) } : {}),
|
|
124
128
|
});
|
|
125
129
|
if (!res.ok)
|
|
126
130
|
throw new Error(`API ${res.status}: ${await res.text()}`);
|
|
127
131
|
return res.json();
|
|
128
132
|
}
|
|
133
|
+
/** Internal store kinds — engine plumbing, NOT user corpora. Hidden from the
|
|
134
|
+
* default `corpus list`; shown with --all or an explicit --kind. adr: adr/corpus-tags.md */
|
|
135
|
+
exports.INTERNAL_KINDS = ['memory', 'fix', 'inbox'];
|
|
129
136
|
// -- Arg helpers -----------------------------------------------------------
|
|
130
137
|
function getFlag(args, flag) {
|
|
131
138
|
const idx = args.indexOf(flag);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/commands/corpus/client.ts"],"names":[],"mappings":";AAAA;;;;;;;kCAOkC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiClC,8BAQC;AAED,gDAGC;AAID,0BAWC;AAED,wBAMC;AAED,
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/commands/corpus/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -31,6 +31,7 @@ const section_1 = require("./section");
|
|
|
31
31
|
const status_1 = require("./status");
|
|
32
32
|
const manage_1 = require("./manage");
|
|
33
33
|
const refresh_1 = require("./refresh");
|
|
34
|
+
const tags_1 = require("./tags");
|
|
34
35
|
const SUB_HELP = `
|
|
35
36
|
greprag corpus — upload, search, walk, and keep-fresh text corpora.
|
|
36
37
|
|
|
@@ -68,9 +69,19 @@ Subcommands:
|
|
|
68
69
|
last fetched/changed, next check, failures.
|
|
69
70
|
audit <store> [--limit N] Show recent refresh evidence: preserved,
|
|
70
71
|
fresh, and removed node IDs + hashes.
|
|
71
|
-
list [--kind K]
|
|
72
|
+
list [--kind K] [--tag T] [--all] List stores under this tenant. Hides
|
|
73
|
+
internal stores (memory/fix/inbox) by
|
|
74
|
+
default; --all or --kind shows them.
|
|
75
|
+
tag <store> <tag>... Add organization tag(s) to a store.
|
|
76
|
+
tag rename <old> <new> Rename a tag across EVERY store with it.
|
|
77
|
+
untag <store> <tag>... Remove tag(s) from a store.
|
|
78
|
+
tags List all tags in use + store counts
|
|
79
|
+
(incl. standard seed suggestions).
|
|
72
80
|
delete <store> [--yes] Delete a store. --yes to confirm.
|
|
73
81
|
|
|
82
|
+
Tags are a free-form organization axis, orthogonal to --kind (the engine type).
|
|
83
|
+
Standard seeds (suggestions, rename/add freely): api-docs, research, book, reference.
|
|
84
|
+
|
|
74
85
|
Examples:
|
|
75
86
|
greprag corpus upload ./meditations.txt --enriched --name "Meditations"
|
|
76
87
|
greprag corpus upload https://code.claude.com/docs/llms-full.txt --raw --name "claude-code-docs"
|
|
@@ -87,6 +98,12 @@ Examples:
|
|
|
87
98
|
greprag corpus sources claude-docs
|
|
88
99
|
greprag corpus audit claude-docs
|
|
89
100
|
greprag corpus list --kind docs
|
|
101
|
+
greprag corpus list --tag api-docs
|
|
102
|
+
greprag corpus tag stripe-docs api-docs stripe
|
|
103
|
+
greprag corpus tag rename api-docs reference-docs
|
|
104
|
+
greprag corpus untag stripe-docs stripe
|
|
105
|
+
greprag corpus tags
|
|
106
|
+
greprag corpus search "webhook signing" --tag api-docs
|
|
90
107
|
greprag corpus delete Meditations --yes
|
|
91
108
|
`.trim();
|
|
92
109
|
async function runCorpus(args) {
|
|
@@ -102,6 +119,9 @@ async function runCorpus(args) {
|
|
|
102
119
|
case 'sources': return (0, refresh_1.sourcesCmd)(rest);
|
|
103
120
|
case 'audit': return (0, refresh_1.auditCmd)(rest);
|
|
104
121
|
case 'list': return (0, manage_1.listCmd)(rest);
|
|
122
|
+
case 'tag': return (0, tags_1.tagCmd)(rest);
|
|
123
|
+
case 'untag': return (0, tags_1.untagCmd)(rest);
|
|
124
|
+
case 'tags': return (0, tags_1.tagsCmd)(rest);
|
|
105
125
|
case 'delete': return (0, manage_1.deleteCmd)(rest);
|
|
106
126
|
case undefined:
|
|
107
127
|
case 'help':
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/corpus/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;sDAsBsD;;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/corpus/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;sDAsBsD;;AAsFtD,8BA4BC;AAhHD,qCAAqC;AACrC,qCAAqC;AACrC,iCAAiC;AACjC,uCAAuC;AACvC,qCAAqC;AACrC,qCAA8C;AAC9C,uCAA6D;AAC7D,iCAAmD;AAEnD,MAAM,QAAQ,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyEhB,CAAC,IAAI,EAAE,CAAC;AAEF,KAAK,UAAU,SAAS,CAAC,IAAc;IAC5C,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC3B,QAAQ,GAAG,EAAE,CAAC;QACZ,KAAK,QAAQ,CAAC,CAAE,OAAO,IAAA,kBAAS,EAAC,IAAI,CAAC,CAAC;QACvC,KAAK,QAAQ,CAAC,CAAE,OAAO,IAAA,kBAAS,EAAC,IAAI,CAAC,CAAC;QACvC,KAAK,MAAM,CAAC,CAAI,OAAO,IAAA,cAAO,EAAC,IAAI,CAAC,CAAC;QACrC,KAAK,SAAS,CAAC,CAAC,OAAO,IAAA,oBAAU,EAAC,IAAI,CAAC,CAAC;QACxC,KAAK,QAAQ,CAAC,CAAE,OAAO,IAAA,kBAAS,EAAC,IAAI,CAAC,CAAC;QACvC,KAAK,SAAS,CAAC,CAAC,OAAO,IAAA,oBAAU,EAAC,IAAI,CAAC,CAAC;QACxC,KAAK,SAAS,CAAC,CAAC,OAAO,IAAA,oBAAU,EAAC,IAAI,CAAC,CAAC;QACxC,KAAK,OAAO,CAAC,CAAG,OAAO,IAAA,kBAAQ,EAAC,IAAI,CAAC,CAAC;QACtC,KAAK,MAAM,CAAC,CAAI,OAAO,IAAA,gBAAO,EAAC,IAAI,CAAC,CAAC;QACrC,KAAK,KAAK,CAAC,CAAK,OAAO,IAAA,aAAM,EAAC,IAAI,CAAC,CAAC;QACpC,KAAK,OAAO,CAAC,CAAG,OAAO,IAAA,eAAQ,EAAC,IAAI,CAAC,CAAC;QACtC,KAAK,MAAM,CAAC,CAAI,OAAO,IAAA,cAAO,EAAC,IAAI,CAAC,CAAC;QACrC,KAAK,QAAQ,CAAC,CAAE,OAAO,IAAA,kBAAS,EAAC,IAAI,CAAC,CAAC;QACvC,KAAK,SAAS,CAAC;QACf,KAAK,MAAM,CAAC;QACZ,KAAK,QAAQ,CAAC;QACd,KAAK,IAAI;YACP,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YACtB,OAAO;QACT;YACE,OAAO,CAAC,KAAK,CAAC,uBAAuB,GAAG,IAAI,CAAC,CAAC;YAC9C,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YACtB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;AACH,CAAC"}
|
|
@@ -12,18 +12,44 @@ async function listCmd(args) {
|
|
|
12
12
|
if (!cfg.apiKey)
|
|
13
13
|
(0, client_1.abortNotConfigured)();
|
|
14
14
|
const kindFlag = (0, client_1.getFlag)(args, '--kind');
|
|
15
|
-
const
|
|
15
|
+
const tagFlag = (0, client_1.getFlag)(args, '--tag');
|
|
16
|
+
const showAll = args.includes('--all');
|
|
17
|
+
const params = new URLSearchParams();
|
|
18
|
+
if (kindFlag)
|
|
19
|
+
params.set('kind', kindFlag);
|
|
20
|
+
if (tagFlag)
|
|
21
|
+
params.set('tag', tagFlag);
|
|
22
|
+
const qs = params.toString();
|
|
23
|
+
const url = `${cfg.apiUrl}/v1/stores${qs ? `?${qs}` : ''}`;
|
|
16
24
|
const result = await (0, client_1.apiGet)(url, cfg.apiKey);
|
|
17
|
-
|
|
18
|
-
|
|
25
|
+
// Hide internal stores (memory/fix/inbox) from the default user-facing list —
|
|
26
|
+
// they're engine plumbing, not user corpora. An explicit --kind or --all
|
|
27
|
+
// shows them for audit. adr: adr/corpus-tags.md
|
|
28
|
+
const internal = new Set(client_1.INTERNAL_KINDS);
|
|
29
|
+
const hideInternal = !showAll && !kindFlag;
|
|
30
|
+
const stores = hideInternal
|
|
31
|
+
? result.stores.filter(s => !internal.has(s.kind))
|
|
32
|
+
: result.stores;
|
|
33
|
+
if (stores.length === 0) {
|
|
34
|
+
if (tagFlag)
|
|
35
|
+
console.log(`No stores tagged "${tagFlag}"${kindFlag ? ` with kind="${kindFlag}"` : ''}.`);
|
|
36
|
+
else if (kindFlag)
|
|
37
|
+
console.log(`No stores with kind="${kindFlag}".`);
|
|
38
|
+
else
|
|
39
|
+
console.log('No stores yet.');
|
|
19
40
|
console.log('Upload one: greprag corpus upload <file|url> --name "<name>"');
|
|
20
41
|
return;
|
|
21
42
|
}
|
|
22
|
-
const sorted = [...
|
|
43
|
+
const sorted = [...stores].sort((a, b) => b.createdAt.localeCompare(a.createdAt));
|
|
44
|
+
const hidden = result.stores.length - stores.length;
|
|
23
45
|
console.log(`\n${sorted.length} store${sorted.length === 1 ? '' : 's'}:\n`);
|
|
24
46
|
for (const s of sorted) {
|
|
25
47
|
const created = new Date(s.createdAt).toISOString().slice(0, 10);
|
|
26
|
-
|
|
48
|
+
const tagStr = (s.tags && s.tags.length) ? ` #${s.tags.join(' #')}` : '';
|
|
49
|
+
console.log(` ${s.id} ${s.kind.padEnd(8)} ${s.nodeCount.toString().padStart(6)} nodes ${s.wordCount.toString().padStart(8)} words ${created} ${s.name}${tagStr}`);
|
|
50
|
+
}
|
|
51
|
+
if (hidden > 0) {
|
|
52
|
+
console.log(`\n (${hidden} internal store${hidden === 1 ? '' : 's'} hidden — memory/fix/inbox. Use --all to show.)`);
|
|
27
53
|
}
|
|
28
54
|
}
|
|
29
55
|
async function deleteCmd(args) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manage.js","sourceRoot":"","sources":["../../../src/commands/corpus/manage.ts"],"names":[],"mappings":";AAAA;;;8EAG8E;;AAO9E,
|
|
1
|
+
{"version":3,"file":"manage.js","sourceRoot":"","sources":["../../../src/commands/corpus/manage.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
8
|
exports.searchCmd = searchCmd;
|
|
9
9
|
const client_1 = require("./client");
|
|
10
|
-
const SEARCH_VALUE_FLAGS = new Set(['--limit', '--section', '--shape', '--store', '--kind', '--rerank-model', '--authenticity']);
|
|
10
|
+
const SEARCH_VALUE_FLAGS = new Set(['--limit', '--section', '--shape', '--store', '--kind', '--tag', '--rerank-model', '--authenticity']);
|
|
11
11
|
/** Score tag: the calibrated rerank confidence when the feature reranker ran
|
|
12
12
|
* (the honest signal), else the raw RRF score. RRF magnitudes are uncalibrated
|
|
13
13
|
* and compressed — misleading as a relevance read. */
|
|
@@ -27,7 +27,8 @@ async function searchCmd(args) {
|
|
|
27
27
|
const all = args.includes('--all');
|
|
28
28
|
const storeFlags = (0, client_1.getFlags)(args, '--store');
|
|
29
29
|
const kind = (0, client_1.getFlag)(args, '--kind');
|
|
30
|
-
const
|
|
30
|
+
const tag = (0, client_1.getFlag)(args, '--tag');
|
|
31
|
+
const multistore = all || storeFlags.length > 0 || !!kind || !!tag;
|
|
31
32
|
const limit = parseInt((0, client_1.getFlag)(args, '--limit') || (multistore ? '8' : '5'), 10);
|
|
32
33
|
const section = (0, client_1.getFlag)(args, '--section');
|
|
33
34
|
const shape = (0, client_1.getFlag)(args, '--shape');
|
|
@@ -53,7 +54,7 @@ async function searchCmd(args) {
|
|
|
53
54
|
if (multistore) {
|
|
54
55
|
const queryText = positionals[0];
|
|
55
56
|
if (!queryText) {
|
|
56
|
-
console.error('Usage: greprag corpus search "<lexical query>" (--all | --store <ref> [--store <ref>]...
|
|
57
|
+
console.error('Usage: greprag corpus search "<lexical query>" (--all | --store <ref> [--store <ref>]... | --tag T | --kind K) [--limit 8] [--section "<heading>"] [--rerank]');
|
|
57
58
|
process.exit(1);
|
|
58
59
|
}
|
|
59
60
|
let storeIds;
|
|
@@ -62,11 +63,17 @@ async function searchCmd(args) {
|
|
|
62
63
|
for (const ref of storeFlags)
|
|
63
64
|
storeIds.push((await (0, client_1.resolveStore)(ref, cfg.apiUrl, cfg.apiKey)).id);
|
|
64
65
|
}
|
|
65
|
-
else if (kind) {
|
|
66
|
-
|
|
66
|
+
else if (kind || tag) {
|
|
67
|
+
// --tag and --kind both narrow the store set server-side (AND together).
|
|
68
|
+
const params = new URLSearchParams();
|
|
69
|
+
if (kind)
|
|
70
|
+
params.set('kind', kind);
|
|
71
|
+
if (tag)
|
|
72
|
+
params.set('tag', tag);
|
|
73
|
+
const list = await (0, client_1.apiGet)(`${cfg.apiUrl}/v1/stores?${params.toString()}`, cfg.apiKey);
|
|
67
74
|
storeIds = list.stores.map(s => s.id);
|
|
68
75
|
if (storeIds.length === 0) {
|
|
69
|
-
console.error(`No stores
|
|
76
|
+
console.error(`No stores match${tag ? ` tag="${tag}"` : ''}${kind ? ` kind="${kind}"` : ''}.`);
|
|
70
77
|
process.exit(1);
|
|
71
78
|
}
|
|
72
79
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search.js","sourceRoot":"","sources":["../../../src/commands/corpus/search.ts"],"names":[],"mappings":";AAAA;;;;qEAIqE;;AAyBrE,
|
|
1
|
+
{"version":3,"file":"search.js","sourceRoot":"","sources":["../../../src/commands/corpus/search.ts"],"names":[],"mappings":"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"}
|
|
@@ -24,7 +24,8 @@ async function statusCmd(args) {
|
|
|
24
24
|
const barWidth = 30;
|
|
25
25
|
const filled = Math.round((pct / 100) * barWidth);
|
|
26
26
|
const bar = '█'.repeat(filled) + '░'.repeat(barWidth - filled);
|
|
27
|
-
|
|
27
|
+
const tagStr = (store.tags && store.tags.length) ? ` · #${store.tags.join(' #')}` : '';
|
|
28
|
+
console.log(`\n${store.name} · ${store.nodeCount} nodes · ${store.kind}${tagStr}`);
|
|
28
29
|
console.log(`\n Enrichment: [${bar}] ${pct}%`);
|
|
29
30
|
console.log(` Completed: ${s.completed.toLocaleString().padStart(6)} / ${s.total.toLocaleString()}`);
|
|
30
31
|
if (s.pending > 0)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../../src/commands/corpus/status.ts"],"names":[],"mappings":";AAAA;;;iFAGiF;;AAMjF,
|
|
1
|
+
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../../src/commands/corpus/status.ts"],"names":[],"mappings":";AAAA;;;iFAGiF;;AAMjF,8BAyCC;AA7CD,qCAEkB;AAEX,KAAK,UAAU,SAAS,CAAC,IAAc;IAC5C,MAAM,GAAG,GAAG,IAAA,kBAAS,GAAE,CAAC;IACxB,IAAI,CAAC,GAAG,CAAC,MAAM;QAAE,IAAA,2BAAkB,GAAE,CAAC;IAEtC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,OAAO,CAAC,KAAK,CAAC,8CAA8C,CAAC,CAAC;QAC9D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,MAAM,KAAK,GAAG,MAAM,IAAA,qBAAY,EAAC,GAAG,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAE9D,MAAM,GAAG,GAAG,MAAM,IAAA,eAAM,EAKrB,GAAG,GAAG,CAAC,MAAM,cAAc,KAAK,CAAC,EAAE,aAAa,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACjE,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM;QAAE,MAAM,IAAI,KAAK,CAAC,GAAG,CAAC,KAAK,IAAI,eAAe,CAAC,CAAC;IAE1E,MAAM,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC;IACrB,MAAM,GAAG,GAAG,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACxE,MAAM,QAAQ,GAAG,EAAE,CAAC;IACpB,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,QAAQ,CAAC,CAAC;IAClD,MAAM,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,QAAQ,GAAG,MAAM,CAAC,CAAC;IAE/D,MAAM,MAAM,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACvF,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,MAAM,KAAK,CAAC,SAAS,YAAY,KAAK,CAAC,IAAI,GAAG,MAAM,EAAE,CAAC,CAAC;IACnF,OAAO,CAAC,GAAG,CAAC,qBAAqB,GAAG,KAAK,GAAG,GAAG,CAAC,CAAC;IACjD,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC,SAAS,CAAC,cAAc,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;IACxG,IAAI,CAAC,CAAC,OAAO,GAAG,CAAC;QAAM,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAC/F,IAAI,CAAC,CAAC,WAAW,GAAG,CAAC;QAAE,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC,WAAW,CAAC,cAAc,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IACnG,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC;QAAO,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,0BAA0B,CAAC,CAAC;IACnI,IAAI,GAAG,CAAC,oBAAoB,EAAE,CAAC;QAC7B,OAAO,CAAC,GAAG,CAAC,kBAAkB,GAAG,CAAC,oBAAoB,EAAE,CAAC,CAAC;IAC5D,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,IAAI,CAAC,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC,WAAW,GAAG,CAAC,EAAE,CAAC;QACvC,OAAO,CAAC,GAAG,CAAC,wEAAwE,CAAC,CAAC;IACxF,CAAC;SAAM,IAAI,CAAC,CAAC,SAAS,GAAG,CAAC,EAAE,CAAC;QAC3B,OAAO,CAAC,GAAG,CAAC,qCAAqC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;IACrG,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/** greprag corpus tag / untag / tags — the organization axis.
|
|
2
|
+
*
|
|
3
|
+
* Tags are a free-form, many-per-store label set, orthogonal to `kind` (the
|
|
4
|
+
* closed engine enum). The engine never branches on a tag; tags drive
|
|
5
|
+
* filtering, the corpus announce, and human/agent navigation. Standard seed
|
|
6
|
+
* tags (api-docs / research / book / reference) are suggestions, not a closed
|
|
7
|
+
* set — users add their own and rename freely. adr: adr/corpus-tags.md
|
|
8
|
+
*
|
|
9
|
+
* Subcommands:
|
|
10
|
+
* tag <store> <tag>... add tag(s) to a store
|
|
11
|
+
* tag rename <old> <new> rename a tag across EVERY store carrying it
|
|
12
|
+
* untag <store> <tag>... remove tag(s) from a store
|
|
13
|
+
* tags list all tags in use + per-tag store counts
|
|
14
|
+
*/
|
|
15
|
+
export declare function tagCmd(args: string[]): Promise<void>;
|
|
16
|
+
export declare function untagCmd(args: string[]): Promise<void>;
|
|
17
|
+
export declare function tagsCmd(_args: string[]): Promise<void>;
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/** greprag corpus tag / untag / tags — the organization axis.
|
|
3
|
+
*
|
|
4
|
+
* Tags are a free-form, many-per-store label set, orthogonal to `kind` (the
|
|
5
|
+
* closed engine enum). The engine never branches on a tag; tags drive
|
|
6
|
+
* filtering, the corpus announce, and human/agent navigation. Standard seed
|
|
7
|
+
* tags (api-docs / research / book / reference) are suggestions, not a closed
|
|
8
|
+
* set — users add their own and rename freely. adr: adr/corpus-tags.md
|
|
9
|
+
*
|
|
10
|
+
* Subcommands:
|
|
11
|
+
* tag <store> <tag>... add tag(s) to a store
|
|
12
|
+
* tag rename <old> <new> rename a tag across EVERY store carrying it
|
|
13
|
+
* untag <store> <tag>... remove tag(s) from a store
|
|
14
|
+
* tags list all tags in use + per-tag store counts
|
|
15
|
+
*/
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
exports.tagCmd = tagCmd;
|
|
18
|
+
exports.untagCmd = untagCmd;
|
|
19
|
+
exports.tagsCmd = tagsCmd;
|
|
20
|
+
const client_1 = require("./client");
|
|
21
|
+
const SEED_TAGS = ['api-docs', 'research', 'book', 'reference'];
|
|
22
|
+
async function tagCmd(args) {
|
|
23
|
+
const cfg = (0, client_1.getConfig)();
|
|
24
|
+
if (!cfg.apiKey)
|
|
25
|
+
(0, client_1.abortNotConfigured)();
|
|
26
|
+
// `tag rename <old> <new>` — propagating rename across the tenant.
|
|
27
|
+
if (args[0] === 'rename') {
|
|
28
|
+
const oldTag = args[1];
|
|
29
|
+
const newTag = args[2];
|
|
30
|
+
if (!oldTag || !newTag) {
|
|
31
|
+
console.error('Usage: greprag corpus tag rename <oldTag> <newTag>');
|
|
32
|
+
process.exit(1);
|
|
33
|
+
}
|
|
34
|
+
const res = await (0, client_1.apiCall)(`${cfg.apiUrl}/v1/stores/tags/rename`, cfg.apiKey, { old: oldTag, new: newTag });
|
|
35
|
+
if (!res.ok)
|
|
36
|
+
throw new Error(res.error || 'rename failed');
|
|
37
|
+
console.log(`Renamed "${oldTag}" → "${newTag}" across ${res.storesTouched} store${res.storesTouched === 1 ? '' : 's'}.`);
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
const ref = args[0];
|
|
41
|
+
const tags = args.slice(1).filter(t => !t.startsWith('-'));
|
|
42
|
+
if (!ref || tags.length === 0) {
|
|
43
|
+
console.error('Usage: greprag corpus tag <storeIdOrName> <tag>...\n or: greprag corpus tag rename <oldTag> <newTag>');
|
|
44
|
+
process.exit(1);
|
|
45
|
+
}
|
|
46
|
+
const store = await (0, client_1.resolveStore)(ref, cfg.apiUrl, cfg.apiKey);
|
|
47
|
+
const res = await (0, client_1.apiCall)(`${cfg.apiUrl}/v1/stores/${store.id}/tags`, cfg.apiKey, { tags });
|
|
48
|
+
if (!res.ok)
|
|
49
|
+
throw new Error(res.error || 'tag failed');
|
|
50
|
+
console.log(`${store.name}: tags = [${(res.tags || []).join(', ')}]`);
|
|
51
|
+
}
|
|
52
|
+
async function untagCmd(args) {
|
|
53
|
+
const cfg = (0, client_1.getConfig)();
|
|
54
|
+
if (!cfg.apiKey)
|
|
55
|
+
(0, client_1.abortNotConfigured)();
|
|
56
|
+
const ref = args[0];
|
|
57
|
+
const tags = args.slice(1).filter(t => !t.startsWith('-'));
|
|
58
|
+
if (!ref || tags.length === 0) {
|
|
59
|
+
console.error('Usage: greprag corpus untag <storeIdOrName> <tag>...');
|
|
60
|
+
process.exit(1);
|
|
61
|
+
}
|
|
62
|
+
const store = await (0, client_1.resolveStore)(ref, cfg.apiUrl, cfg.apiKey);
|
|
63
|
+
const res = await (0, client_1.apiDelete)(`${cfg.apiUrl}/v1/stores/${store.id}/tags`, cfg.apiKey, { tags });
|
|
64
|
+
if (!res.ok)
|
|
65
|
+
throw new Error(res.error || 'untag failed');
|
|
66
|
+
console.log(`${store.name}: tags = [${(res.tags || []).join(', ')}]`);
|
|
67
|
+
}
|
|
68
|
+
async function tagsCmd(_args) {
|
|
69
|
+
const cfg = (0, client_1.getConfig)();
|
|
70
|
+
if (!cfg.apiKey)
|
|
71
|
+
(0, client_1.abortNotConfigured)();
|
|
72
|
+
const res = await (0, client_1.apiGet)(`${cfg.apiUrl}/v1/stores/tags`, cfg.apiKey);
|
|
73
|
+
const inUse = new Map(res.tags.map(t => [t.tag, t.storeCount]));
|
|
74
|
+
if (res.tags.length === 0) {
|
|
75
|
+
console.log('\nNo tags in use yet.');
|
|
76
|
+
}
|
|
77
|
+
else {
|
|
78
|
+
console.log(`\n${res.tags.length} tag${res.tags.length === 1 ? '' : 's'} in use:\n`);
|
|
79
|
+
for (const t of res.tags) {
|
|
80
|
+
console.log(` ${t.tag.padEnd(20)} ${t.storeCount.toString().padStart(4)} store${t.storeCount === 1 ? '' : 's'}`);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
// Surface the seed tags as suggestions (those not already in use).
|
|
84
|
+
const unusedSeeds = SEED_TAGS.filter(s => !inUse.has(s));
|
|
85
|
+
if (unusedSeeds.length > 0) {
|
|
86
|
+
console.log(`\nStandard tags you can use (suggestions, not enforced): ${unusedSeeds.join(', ')}`);
|
|
87
|
+
}
|
|
88
|
+
console.log('\n Tag a store: greprag corpus tag <store> <tag>...');
|
|
89
|
+
console.log(' Filter: greprag corpus list --tag <tag> · greprag corpus search "q" --tag <tag>');
|
|
90
|
+
}
|
|
91
|
+
//# sourceMappingURL=tags.js.map
|