robrain 2.5.0 → 2.6.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.
Files changed (38) hide show
  1. package/dist/commands/capture.test.js +4 -1
  2. package/dist/commands/capture.test.js.map +1 -1
  3. package/dist/commands/check.d.ts +5 -0
  4. package/dist/commands/check.d.ts.map +1 -1
  5. package/dist/commands/check.js +15 -0
  6. package/dist/commands/check.js.map +1 -1
  7. package/dist/commands/governance.d.ts +32 -0
  8. package/dist/commands/governance.d.ts.map +1 -0
  9. package/dist/commands/governance.js +181 -0
  10. package/dist/commands/governance.js.map +1 -0
  11. package/dist/commands/governance.test.d.ts +2 -0
  12. package/dist/commands/governance.test.d.ts.map +1 -0
  13. package/dist/commands/governance.test.js +42 -0
  14. package/dist/commands/governance.test.js.map +1 -0
  15. package/dist/commands/install.js +2 -2
  16. package/dist/commands/projects.d.ts +35 -0
  17. package/dist/commands/projects.d.ts.map +1 -1
  18. package/dist/commands/projects.js +166 -0
  19. package/dist/commands/projects.js.map +1 -1
  20. package/dist/commands/review.d.ts.map +1 -1
  21. package/dist/commands/review.js +6 -4
  22. package/dist/commands/review.js.map +1 -1
  23. package/dist/commands/search.d.ts +34 -0
  24. package/dist/commands/search.d.ts.map +1 -0
  25. package/dist/commands/search.js +100 -0
  26. package/dist/commands/search.js.map +1 -0
  27. package/dist/commands/search.test.d.ts +2 -0
  28. package/dist/commands/search.test.d.ts.map +1 -0
  29. package/dist/commands/search.test.js +43 -0
  30. package/dist/commands/search.test.js.map +1 -0
  31. package/dist/index.js +80 -3
  32. package/dist/index.js.map +1 -1
  33. package/package.json +2 -2
  34. package/vendor/codex-hooks/user-prompt-submit.mjs +14 -1
  35. package/vendor/sensing-mcp/dist/index.js +91 -19
  36. package/vendor/sensing-mcp/package.json +1 -1
  37. package/vendor/synthesis/dist/index.js +43 -9
  38. package/vendor/synthesis/package.json +1 -1
@@ -1,6 +1,9 @@
1
1
  import { describe, it } from 'node:test';
2
2
  import assert from 'node:assert/strict';
3
- import { DEFAULT_CAPTURE_SETTINGS, buildCapturePatch, formatPreview, parseKindFlag, parseTurnsJsonl, readCaptureSettings, } from './capture.js';
3
+ // chalk colors the preview lines; pin FORCE_COLOR before loading capture.js
4
+ // so assertions match plain text (same pattern as inject/status/synth tests).
5
+ process.env.FORCE_COLOR = '0';
6
+ const { DEFAULT_CAPTURE_SETTINGS, buildCapturePatch, formatPreview, parseKindFlag, parseTurnsJsonl, readCaptureSettings, } = await import('./capture.js');
4
7
  const withKinds = {
5
8
  ...DEFAULT_CAPTURE_SETTINGS,
6
9
  kinds: [
@@ -1 +1 @@
1
- {"version":3,"file":"capture.test.js","sourceRoot":"","sources":["../../src/commands/capture.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"capture.test.js","sourceRoot":"","sources":["../../src/commands/capture.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +1,7 @@
1
+ /** "decided by <email> on <day>" / "decided on <day>" / '' when the server sent neither. */
2
+ export declare function formatDecidedBy(m: {
3
+ author_email?: string | null;
4
+ decided_at?: string | null;
5
+ }): string;
1
6
  export declare function checkCommand(text: string): Promise<void>;
2
7
  //# sourceMappingURL=check.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"check.d.ts","sourceRoot":"","sources":["../../src/commands/check.ts"],"names":[],"mappings":"AA6BA,wBAAsB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA4D9D"}
1
+ {"version":3,"file":"check.d.ts","sourceRoot":"","sources":["../../src/commands/check.ts"],"names":[],"mappings":"AAgCA,4FAA4F;AAC5F,wBAAgB,eAAe,CAAC,CAAC,EAAE;IAAE,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GAAG,MAAM,CAOvG;AAED,wBAAsB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA8D9D"}
@@ -15,6 +15,18 @@ import { cwd } from 'process';
15
15
  import { readConfig, isCloudInstall } from '../lib/config.js';
16
16
  import { failPerception, failPerceptionUnreachable } from '../lib/perception-errors.js';
17
17
  import { gatherProjectInfo } from '../lib/project.js';
18
+ /** "decided by <email> on <day>" / "decided on <day>" / '' when the server sent neither. */
19
+ export function formatDecidedBy(m) {
20
+ const parsed = m.decided_at ? new Date(m.decided_at) : null;
21
+ const day = parsed && !Number.isNaN(parsed.getTime()) ? parsed.toISOString().slice(0, 10) : '';
22
+ if (m.author_email && day)
23
+ return `decided by ${m.author_email} on ${day}`;
24
+ if (m.author_email)
25
+ return `decided by ${m.author_email}`;
26
+ if (day)
27
+ return `decided on ${day}`;
28
+ return '';
29
+ }
18
30
  export async function checkCommand(text) {
19
31
  console.log();
20
32
  const config = readConfig();
@@ -56,6 +68,9 @@ export async function checkCommand(text) {
56
68
  }
57
69
  const tag = m.reviewed ? chalk.green('[approved]') : chalk.dim('[pending review]');
58
70
  console.log(` ${chalk.dim('from:')} ${m.decision} ${tag}`);
71
+ const decidedBy = formatDecidedBy(m);
72
+ if (decidedBy)
73
+ console.log(` ${chalk.dim(decidedBy)}`);
59
74
  if (m.superseded && m.superseded_by) {
60
75
  // The decision carrying the veto was replaced, but the rejection still
61
76
  // stands (choice and rejections have different lifetimes) — say so
@@ -1 +1 @@
1
- {"version":3,"file":"check.js","sourceRoot":"","sources":["../../src/commands/check.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"check.js","sourceRoot":"","sources":["../../src/commands/check.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ export interface RulesAddOptions {
2
+ because?: string;
3
+ rejected?: string[];
4
+ kind?: string;
5
+ subject?: string;
6
+ projectId?: string;
7
+ email?: string;
8
+ scope?: string;
9
+ }
10
+ export interface PromoteOptions {
11
+ to?: string;
12
+ }
13
+ /** "option: reason" → { option, reason }; a bare option gets an empty reason. */
14
+ export declare function parseRejectedFlag(raw: string): {
15
+ option: string;
16
+ reason: string;
17
+ } | null;
18
+ /** git user.email of the current directory, or null. */
19
+ export declare function gitUserEmail(dir?: string): string | null;
20
+ /** Body for POST /projects/:id/rules from the flags; errors are plain strings for the caller to print. */
21
+ export declare function buildRuleBody(decision: string, opts: RulesAddOptions, authorEmail: string | null): {
22
+ ok: true;
23
+ body: Record<string, unknown>;
24
+ } | {
25
+ ok: false;
26
+ error: string;
27
+ };
28
+ /** Same shape Perception accepts (strict charset, 254 max), so the CLI never prints an author the server will drop. */
29
+ export declare function normalizeAuthorEmail(raw: string | null | undefined): string | null;
30
+ export declare function rulesAddCommand(decision: string, opts: RulesAddOptions): Promise<void>;
31
+ export declare function promoteCommand(decisionId: string, opts: PromoteOptions): Promise<void>;
32
+ //# sourceMappingURL=governance.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"governance.d.ts","sourceRoot":"","sources":["../../src/commands/governance.ts"],"names":[],"mappings":"AAqBA,MAAM,WAAW,eAAe;IAC9B,OAAO,CAAC,EAAI,MAAM,CAAA;IAClB,QAAQ,CAAC,EAAG,MAAM,EAAE,CAAA;IACpB,IAAI,CAAC,EAAO,MAAM,CAAA;IAClB,OAAO,CAAC,EAAI,MAAM,CAAA;IAClB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,KAAK,CAAC,EAAM,MAAM,CAAA;IAClB,KAAK,CAAC,EAAM,MAAM,CAAA;CACnB;AAED,MAAM,WAAW,cAAc;IAC7B,EAAE,CAAC,EAAE,MAAM,CAAA;CACZ;AAED,iFAAiF;AACjF,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAQxF;AAED,wDAAwD;AACxD,wBAAgB,YAAY,CAAC,GAAG,GAAE,MAAc,GAAG,MAAM,GAAG,IAAI,CAQ/D;AAED,0GAA0G;AAC1G,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI,GAC7F;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,GAC3C;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAgB/B;AAED,uHAAuH;AACvH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAGlF;AAED,wBAAsB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CA8D5F;AAED,wBAAsB,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CA+C5F"}
@@ -0,0 +1,181 @@
1
+ // packages/cli/src/commands/governance.ts
2
+ // ─────────────────────────────────────────────────────────────
3
+ // robrain rules add "<decision>" [--because "..."] [--rejected "option: reason"]...
4
+ // [--kind <name>] [--subject <text>] [--project-id <id>] [--email <addr>]
5
+ // robrain promote <decision-id> --to production-agents | --to <project-id>
6
+ //
7
+ // Rules written by hand go through POST /projects/:id/rules on both
8
+ // editions: stored like a captured decision (same columns, same vetoes,
9
+ // same summary) with confidence 1.0, source "manual", approved on insert,
10
+ // and the author's email. Promotion (POST /decisions/:id/promote) copies a
11
+ // decision into the org's governance project or one agent project with
12
+ // its lineage; it exists on RoBrain cloud only, so self-hosted Perception
13
+ // answers 404 and the command says so.
14
+ // ─────────────────────────────────────────────────────────────
15
+ import chalk from 'chalk';
16
+ import { execFileSync } from 'child_process';
17
+ import { cwd } from 'process';
18
+ import { gatherProjectInfo } from '../lib/project.js';
19
+ import { exitUnreachable, perceptionEndpoint } from './projects.js';
20
+ /** "option: reason" → { option, reason }; a bare option gets an empty reason. */
21
+ export function parseRejectedFlag(raw) {
22
+ const text = raw.trim();
23
+ if (!text)
24
+ return null;
25
+ const at = text.indexOf(':');
26
+ if (at === -1)
27
+ return { option: text, reason: '' };
28
+ const option = text.slice(0, at).trim();
29
+ const reason = text.slice(at + 1).trim();
30
+ return option ? { option, reason } : null;
31
+ }
32
+ /** git user.email of the current directory, or null. */
33
+ export function gitUserEmail(dir = cwd()) {
34
+ try {
35
+ const out = execFileSync('git', ['config', '--get', 'user.email'], { cwd: dir, timeout: 2000, stdio: ['ignore', 'pipe', 'ignore'] });
36
+ const email = String(out).trim().toLowerCase();
37
+ return /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(email) ? email : null;
38
+ }
39
+ catch {
40
+ return null;
41
+ }
42
+ }
43
+ /** Body for POST /projects/:id/rules from the flags; errors are plain strings for the caller to print. */
44
+ export function buildRuleBody(decision, opts, authorEmail) {
45
+ const text = decision.trim();
46
+ if (!text)
47
+ return { ok: false, error: 'The rule text is empty.' };
48
+ const rejected = [];
49
+ for (const raw of opts.rejected ?? []) {
50
+ const parsed = parseRejectedFlag(raw);
51
+ if (!parsed)
52
+ return { ok: false, error: `Could not read --rejected "${raw}". Use "option: reason".` };
53
+ rejected.push(parsed);
54
+ }
55
+ const body = { decision: text, rejected };
56
+ if (opts.because?.trim())
57
+ body.rationale = opts.because.trim();
58
+ if (opts.kind?.trim())
59
+ body.kind = opts.kind.trim();
60
+ if (opts.subject?.trim())
61
+ body.subject = opts.subject.trim();
62
+ if (opts.scope?.trim())
63
+ body.scope = opts.scope.trim();
64
+ if (authorEmail)
65
+ body.author_email = authorEmail;
66
+ return { ok: true, body };
67
+ }
68
+ /** Same shape Perception accepts (strict charset, 254 max), so the CLI never prints an author the server will drop. */
69
+ export function normalizeAuthorEmail(raw) {
70
+ const email = (raw ?? '').trim().toLowerCase();
71
+ return email.length > 0 && email.length <= 254 && /^[a-z0-9._%+-]{1,64}@[a-z0-9-]+(\.[a-z0-9-]+)+$/.test(email) ? email : null;
72
+ }
73
+ export async function rulesAddCommand(decision, opts) {
74
+ if (opts.email && !normalizeAuthorEmail(opts.email)) {
75
+ console.log(chalk.yellow(`\n --email "${opts.email}" is not an email address; the rule will be stored without an author.`));
76
+ }
77
+ const authorEmail = normalizeAuthorEmail(opts.email) ?? gitUserEmail();
78
+ const built = buildRuleBody(decision, opts, authorEmail);
79
+ if (!built.ok) {
80
+ console.log(chalk.red(`\n ✗ ${built.error}\n`));
81
+ process.exit(1);
82
+ }
83
+ const { url, key } = perceptionEndpoint();
84
+ const projectId = opts.projectId?.trim() || gatherProjectInfo(cwd()).id;
85
+ let res;
86
+ try {
87
+ res = await fetch(`${url}/projects/${encodeURIComponent(projectId)}/rules`, {
88
+ method: 'POST',
89
+ headers: { 'Content-Type': 'application/json', Authorization: `Bearer ${key}` },
90
+ body: JSON.stringify(built.body),
91
+ });
92
+ }
93
+ catch (err) {
94
+ exitUnreachable(url, err);
95
+ }
96
+ const payload = await res.json().catch(() => ({}));
97
+ console.log();
98
+ if (res.status === 404) {
99
+ console.log(chalk.red(' ✗ This Perception does not have POST /projects/:id/rules yet. Upgrade with npx robrain@latest up.\n'));
100
+ process.exit(1);
101
+ }
102
+ if (res.status === 403) {
103
+ console.log(chalk.red(' ✗ Only an org admin can write rules into this project.\n'));
104
+ process.exit(1);
105
+ }
106
+ if (!res.ok) {
107
+ console.log(chalk.red(` ✗ Rule not stored (${res.status})`));
108
+ for (const e of payload.errors ?? [payload.detail ?? payload.error ?? ''])
109
+ if (e)
110
+ console.log(chalk.dim(` ${e}`));
111
+ console.log();
112
+ process.exit(1);
113
+ }
114
+ if (payload.action === 'quarantined') {
115
+ // Trust screening fired: stored, but not approved and not in the summary
116
+ // until a human releases it in review.
117
+ console.log(chalk.yellow(' ⚠ Rule held for review (trust screening)') + chalk.dim(` ${payload.decision_id ?? ''}`));
118
+ if (payload.trust_flags?.length) {
119
+ console.log(chalk.dim(` flags: ${payload.trust_flags.map(f => `${f.type}: ${f.evidence}`).join(' · ')}`));
120
+ }
121
+ console.log(chalk.dim(' It is not approved and not in the summary. Release or reject it with robrain review --quarantined.\n'));
122
+ return;
123
+ }
124
+ if (payload.action === 'deduped') {
125
+ console.log(chalk.yellow(' Already stored') + chalk.dim(` the same rule exists as ${payload.decision_id ?? 'an earlier row'}; nothing new was written.\n`));
126
+ return;
127
+ }
128
+ console.log(chalk.green(' ✓ Rule stored') + chalk.dim(` ${payload.decision_id ?? ''}`));
129
+ console.log(chalk.dim(` project ${projectId}${authorEmail ? ` · by ${authorEmail}` : ''} · approved, confidence 1.0`));
130
+ if (payload.superseded_ids?.length) {
131
+ console.log(chalk.dim(` replaced ${payload.superseded_ids.length} earlier entr${payload.superseded_ids.length === 1 ? 'y' : 'ies'} on the same subject`));
132
+ }
133
+ console.log();
134
+ }
135
+ export async function promoteCommand(decisionId, opts) {
136
+ const to = opts.to?.trim();
137
+ if (!decisionId.trim() || !to) {
138
+ console.log(chalk.red('\n ✗ Usage: robrain promote <decision-id> --to production-agents | --to <project-id>\n'));
139
+ process.exit(1);
140
+ }
141
+ const { url, key } = perceptionEndpoint();
142
+ let res;
143
+ try {
144
+ res = await fetch(`${url}/decisions/${encodeURIComponent(decisionId.trim())}/promote`, {
145
+ method: 'POST',
146
+ headers: { 'Content-Type': 'application/json', Authorization: `Bearer ${key}` },
147
+ body: JSON.stringify({ to }),
148
+ });
149
+ }
150
+ catch (err) {
151
+ exitUnreachable(url, err);
152
+ }
153
+ const payload = await res.json().catch(() => ({}));
154
+ console.log();
155
+ if (res.status === 404 && !payload.error?.includes('decision')) {
156
+ console.log(chalk.yellow(' Promotion is a RoBrain cloud feature: it pushes a decision into the org governance project'));
157
+ console.log(chalk.yellow(' (every agent) or one agent project. Self-hosted RoBrain keeps one project, so there is nowhere to push to.\n'));
158
+ process.exit(1);
159
+ }
160
+ if (res.status === 403) {
161
+ console.log(chalk.red(' ✗ Only an org admin can push rules to agents.\n'));
162
+ process.exit(1);
163
+ }
164
+ if (!res.ok) {
165
+ console.log(chalk.red(` ✗ Not pushed (${res.status})`) + chalk.dim(` ${payload.detail ?? payload.error ?? ''}`));
166
+ console.log();
167
+ process.exit(1);
168
+ }
169
+ const where = to === 'production-agents' || to === 'all-agents'
170
+ ? 'every production agent in the org (governance project)'
171
+ : to.startsWith('tag:')
172
+ ? `every agent tagged "${to.slice(4)}" (${payload.target_project_id ?? 'tag rules project'})`
173
+ : `project ${payload.target_project_id ?? to}`;
174
+ if (payload.already) {
175
+ console.log(chalk.green(' ✓ Already pushed') + chalk.dim(` ${payload.promoted_id ?? ''} · ${where}\n`));
176
+ return;
177
+ }
178
+ console.log(chalk.green(' ✓ Pushed') + chalk.dim(` ${payload.promoted_id ?? ''} · ${where}`));
179
+ console.log(chalk.dim(' Agents pick it up on their next summary refresh. See it with robrain search --project-id <agent project>.\n'));
180
+ }
181
+ //# sourceMappingURL=governance.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"governance.js","sourceRoot":"","sources":["../../src/commands/governance.ts"],"names":[],"mappings":"AAAA,0CAA0C;AAC1C,gEAAgE;AAChE,oFAAoF;AACpF,4FAA4F;AAC5F,2EAA2E;AAC3E,EAAE;AACF,oEAAoE;AACpE,wEAAwE;AACxE,0EAA0E;AAC1E,2EAA2E;AAC3E,uEAAuE;AACvE,0EAA0E;AAC1E,uCAAuC;AACvC,gEAAgE;AAEhE,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAC5C,OAAO,EAAE,GAAG,EAAE,MAAM,SAAS,CAAA;AAC7B,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AACrD,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAA;AAgBnE,iFAAiF;AACjF,MAAM,UAAU,iBAAiB,CAAC,GAAW;IAC3C,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,EAAE,CAAA;IACvB,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAA;IACtB,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;IAC5B,IAAI,EAAE,KAAK,CAAC,CAAC;QAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,CAAA;IAClD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAA;IACvC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;IACxC,OAAO,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,IAAI,CAAA;AAC3C,CAAC;AAED,wDAAwD;AACxD,MAAM,UAAU,YAAY,CAAC,MAAc,GAAG,EAAE;IAC9C,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,YAAY,CAAC,KAAK,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,YAAY,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAA;QACpI,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAA;QAC9C,OAAO,4BAA4B,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAA;IAChE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAA;IACb,CAAC;AACH,CAAC;AAED,0GAA0G;AAC1G,MAAM,UAAU,aAAa,CAAC,QAAgB,EAAE,IAAqB,EAAE,WAA0B;IAG/F,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAA;IAC5B,IAAI,CAAC,IAAI;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,yBAAyB,EAAE,CAAA;IACjE,MAAM,QAAQ,GAA8C,EAAE,CAAA;IAC9D,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,QAAQ,IAAI,EAAE,EAAE,CAAC;QACtC,MAAM,MAAM,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAA;QACrC,IAAI,CAAC,MAAM;YAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,8BAA8B,GAAG,0BAA0B,EAAE,CAAA;QACrG,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IACvB,CAAC;IACD,MAAM,IAAI,GAA4B,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAA;IAClE,IAAI,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE;QAAE,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAA;IAC9D,IAAI,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE;QAAK,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAA;IACtD,IAAI,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE;QAAE,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAA;IAC5D,IAAI,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE;QAAI,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAA;IACxD,IAAI,WAAW;QAAW,IAAI,CAAC,YAAY,GAAG,WAAW,CAAA;IACzD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAA;AAC3B,CAAC;AAED,uHAAuH;AACvH,MAAM,UAAU,oBAAoB,CAAC,GAA8B;IACjE,MAAM,KAAK,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAA;IAC9C,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,MAAM,IAAI,GAAG,IAAI,iDAAiD,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAA;AAChI,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,QAAgB,EAAE,IAAqB;IAC3E,IAAI,IAAI,CAAC,KAAK,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACpD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,gBAAgB,IAAI,CAAC,KAAK,uEAAuE,CAAC,CAAC,CAAA;IAC9H,CAAC;IACD,MAAM,WAAW,GAAG,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,YAAY,EAAE,CAAA;IACtE,MAAM,KAAK,GAAG,aAAa,CAAC,QAAQ,EAAE,IAAI,EAAE,WAAW,CAAC,CAAA;IACxD,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,KAAK,CAAC,KAAK,IAAI,CAAC,CAAC,CAAA;QAChD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;IACD,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,kBAAkB,EAAE,CAAA;IACzC,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,iBAAiB,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAA;IAEvE,IAAI,GAAa,CAAA;IACjB,IAAI,CAAC;QACH,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,GAAG,aAAa,kBAAkB,CAAC,SAAS,CAAC,QAAQ,EAAE;YAC1E,MAAM,EAAG,MAAM;YACf,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,aAAa,EAAE,UAAU,GAAG,EAAE,EAAE;YAC/E,IAAI,EAAK,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC;SACpC,CAAC,CAAA;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,eAAe,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;IAC3B,CAAC;IACD,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAGhD,CAAA;IACD,OAAO,CAAC,GAAG,EAAE,CAAA;IACb,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;QACvB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,uGAAuG,CAAC,CAAC,CAAA;QAC/H,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;IACD,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;QACvB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,4DAA4D,CAAC,CAAC,CAAA;QACpF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;IACD,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACZ,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,wBAAwB,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;QAC7D,KAAK,MAAM,CAAC,IAAI,OAAO,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC;YAAE,IAAI,CAAC;gBAAE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAA;QACpH,OAAO,CAAC,GAAG,EAAE,CAAA;QACb,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;IACD,IAAI,OAAO,CAAC,MAAM,KAAK,aAAa,EAAE,CAAC;QACrC,yEAAyE;QACzE,uCAAuC;QACvC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,4CAA4C,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,KAAK,OAAO,CAAC,WAAW,IAAI,EAAE,EAAE,CAAC,CAAC,CAAA;QACrH,IAAI,OAAO,CAAC,WAAW,EAAE,MAAM,EAAE,CAAC;YAChC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,cAAc,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAA;QAC9G,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,0GAA0G,CAAC,CAAC,CAAA;QAClI,OAAM;IACR,CAAC;IACD,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QACjC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,kBAAkB,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,6BAA6B,OAAO,CAAC,WAAW,IAAI,gBAAgB,8BAA8B,CAAC,CAAC,CAAA;QAC7J,OAAM;IACR,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,iBAAiB,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,KAAK,OAAO,CAAC,WAAW,IAAI,EAAE,EAAE,CAAC,CAAC,CAAA;IACzF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,eAAe,SAAS,GAAG,WAAW,CAAC,CAAC,CAAC,SAAS,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,6BAA6B,CAAC,CAAC,CAAA;IACzH,IAAI,OAAO,CAAC,cAAc,EAAE,MAAM,EAAE,CAAC;QACnC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,gBAAgB,OAAO,CAAC,cAAc,CAAC,MAAM,gBAAgB,OAAO,CAAC,cAAc,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,sBAAsB,CAAC,CAAC,CAAA;IAC9J,CAAC;IACD,OAAO,CAAC,GAAG,EAAE,CAAA;AACf,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,UAAkB,EAAE,IAAoB;IAC3E,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,CAAA;IAC1B,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC;QAC9B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,yFAAyF,CAAC,CAAC,CAAA;QACjH,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;IACD,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,kBAAkB,EAAE,CAAA;IACzC,IAAI,GAAa,CAAA;IACjB,IAAI,CAAC;QACH,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,GAAG,cAAc,kBAAkB,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,UAAU,EAAE;YACrF,MAAM,EAAG,MAAM;YACf,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,aAAa,EAAE,UAAU,GAAG,EAAE,EAAE;YAC/E,IAAI,EAAK,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,CAAC;SAChC,CAAC,CAAA;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,eAAe,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;IAC3B,CAAC;IACD,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAGhD,CAAA;IACD,OAAO,CAAC,GAAG,EAAE,CAAA;IACb,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;QAC/D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,8FAA8F,CAAC,CAAC,CAAA;QACzH,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,gHAAgH,CAAC,CAAC,CAAA;QAC3I,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;IACD,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;QACvB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,mDAAmD,CAAC,CAAC,CAAA;QAC3E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;IACD,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACZ,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,mBAAmB,GAAG,CAAC,MAAM,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,KAAK,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,KAAK,IAAI,EAAE,EAAE,CAAC,CAAC,CAAA;QAClH,OAAO,CAAC,GAAG,EAAE,CAAA;QACb,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;IACD,MAAM,KAAK,GAAG,EAAE,KAAK,mBAAmB,IAAI,EAAE,KAAK,YAAY;QAC7D,CAAC,CAAC,wDAAwD;QAC1D,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC;YACrB,CAAC,CAAC,uBAAuB,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,OAAO,CAAC,iBAAiB,IAAI,mBAAmB,GAAG;YAC7F,CAAC,CAAC,WAAW,OAAO,CAAC,iBAAiB,IAAI,EAAE,EAAE,CAAA;IAClD,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;QACpB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,oBAAoB,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,KAAK,OAAO,CAAC,WAAW,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC,CAAC,CAAA;QACzG,OAAM;IACR,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,KAAK,OAAO,CAAC,WAAW,IAAI,EAAE,MAAM,KAAK,EAAE,CAAC,CAAC,CAAA;IAC/F,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,iHAAiH,CAAC,CAAC,CAAA;AAC3I,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=governance.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"governance.test.d.ts","sourceRoot":"","sources":["../../src/commands/governance.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,42 @@
1
+ import { describe, it } from 'node:test';
2
+ import assert from 'node:assert/strict';
3
+ import { buildRuleBody, parseRejectedFlag } from './governance.js';
4
+ describe('parseRejectedFlag', () => {
5
+ it('splits "option: reason" at the first colon', () => {
6
+ assert.deepEqual(parseRejectedFlag('Pinecone: per-namespace pricing: too high'), {
7
+ option: 'Pinecone', reason: 'per-namespace pricing: too high',
8
+ });
9
+ });
10
+ it('accepts a bare option and rejects empty input', () => {
11
+ assert.deepEqual(parseRejectedFlag('npm'), { option: 'npm', reason: '' });
12
+ assert.equal(parseRejectedFlag(' '), null);
13
+ assert.equal(parseRejectedFlag(': no option'), null);
14
+ });
15
+ });
16
+ describe('buildRuleBody', () => {
17
+ it('builds the POST /projects/:id/rules body from the flags', () => {
18
+ const built = buildRuleBody('Never auto-send a plan', {
19
+ because: 'customers must confirm', rejected: ['auto-send: trust'], kind: 'decision', subject: '',
20
+ }, 'ade@roryplans.ai');
21
+ assert.deepEqual(built, {
22
+ ok: true,
23
+ body: {
24
+ decision: 'Never auto-send a plan',
25
+ rejected: [{ option: 'auto-send', reason: 'trust' }],
26
+ rationale: 'customers must confirm',
27
+ kind: 'decision',
28
+ author_email: 'ade@roryplans.ai',
29
+ },
30
+ });
31
+ });
32
+ it('refuses an empty rule or an unreadable --rejected flag', () => {
33
+ assert.equal(buildRuleBody(' ', {}, null).ok, false);
34
+ const bad = buildRuleBody('x', { rejected: [': nothing'] }, null);
35
+ assert.equal(bad.ok, false);
36
+ });
37
+ it('leaves the author out when none is known', () => {
38
+ const built = buildRuleBody('x', {}, null);
39
+ assert.equal(built.ok && 'author_email' in built.body, false);
40
+ });
41
+ });
42
+ //# sourceMappingURL=governance.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"governance.test.js","sourceRoot":"","sources":["../../src/commands/governance.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,WAAW,CAAA;AACxC,OAAO,MAAM,MAAM,oBAAoB,CAAA;AACvC,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAA;AAElE,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;IACjC,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;QACpD,MAAM,CAAC,SAAS,CAAC,iBAAiB,CAAC,2CAA2C,CAAC,EAAE;YAC/E,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,iCAAiC;SAC9D,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IACF,EAAE,CAAC,+CAA+C,EAAE,GAAG,EAAE;QACvD,MAAM,CAAC,SAAS,CAAC,iBAAiB,CAAC,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAA;QACzE,MAAM,CAAC,KAAK,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,CAAA;QAC3C,MAAM,CAAC,KAAK,CAAC,iBAAiB,CAAC,aAAa,CAAC,EAAE,IAAI,CAAC,CAAA;IACtD,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA;AAEF,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;IAC7B,EAAE,CAAC,yDAAyD,EAAE,GAAG,EAAE;QACjE,MAAM,KAAK,GAAG,aAAa,CAAC,wBAAwB,EAAE;YACpD,OAAO,EAAE,wBAAwB,EAAE,QAAQ,EAAE,CAAC,kBAAkB,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,EAAE;SACjG,EAAE,kBAAkB,CAAC,CAAA;QACtB,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE;YACtB,EAAE,EAAE,IAAI;YACR,IAAI,EAAE;gBACJ,QAAQ,EAAE,wBAAwB;gBAClC,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;gBACpD,SAAS,EAAE,wBAAwB;gBACnC,IAAI,EAAE,UAAU;gBAChB,YAAY,EAAE,kBAAkB;aACjC;SACF,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IACF,EAAE,CAAC,wDAAwD,EAAE,GAAG,EAAE;QAChE,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,KAAK,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC,EAAE,EAAE,KAAK,CAAC,CAAA;QACtD,MAAM,GAAG,GAAG,aAAa,CAAC,GAAG,EAAE,EAAE,QAAQ,EAAE,CAAC,WAAW,CAAC,EAAE,EAAE,IAAI,CAAC,CAAA;QACjE,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,CAAC,CAAA;IAC7B,CAAC,CAAC,CAAA;IACF,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;QAClD,MAAM,KAAK,GAAG,aAAa,CAAC,GAAG,EAAE,EAAE,EAAE,IAAI,CAAC,CAAA;QAC1C,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,IAAI,cAAc,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;IAC/D,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
@@ -255,7 +255,7 @@ export async function installCommand(opts) {
255
255
  // Display only (status) — the thin client never embeds locally.
256
256
  ...(provisioned.embeddingProvider ? { embeddingProvider: provisioned.embeddingProvider } : {}),
257
257
  installedAt: new Date().toISOString(),
258
- version: '2.5.0',
258
+ version: '2.6.0',
259
259
  });
260
260
  spinner.succeed('MCP servers configured');
261
261
  // ── Done ───────────────────────────────────────────────────
@@ -443,7 +443,7 @@ async function installSelfHosted(opts) {
443
443
  ...(perceptionKey ? { perceptionKey } : {}),
444
444
  embeddingProvider: provider,
445
445
  installedAt: new Date().toISOString(),
446
- version: '2.5.0',
446
+ version: '2.6.0',
447
447
  selfHosted: true,
448
448
  });
449
449
  spinner.succeed('MCP servers configured for self-hosted mode');
@@ -3,6 +3,41 @@ export declare function perceptionEndpoint(): {
3
3
  key: string;
4
4
  };
5
5
  export declare function exitUnreachable(url: string, err: unknown): never;
6
+ /** Project ids are [a-z0-9._-], 2 to 200 chars; the same folding the install path applies. */
7
+ export declare function normalizeProjectId(raw: string): string | null;
8
+ /**
9
+ * robrain projects create <id> [--name <name>]
10
+ * A project that is not derived from a repository: one a team shares across
11
+ * several repos, or one per team inside an org. Upserts on both editions
12
+ * (POST /projects); on RoBrain cloud the project belongs to the caller's org.
13
+ */
14
+ export declare function projectsCreateCommand(rawId: string, opts: {
15
+ name?: string;
16
+ tag?: string[];
17
+ }): Promise<void>;
18
+ /** Tags are letters, digits, _ and -, at most 10; invalid ones are dropped with a note. */
19
+ export declare function normalizeTags(raw: readonly string[]): string[];
20
+ /**
21
+ * robrain projects tag <id> [tags...] [--suppress <tag>]... [--unsuppress <tag>]...
22
+ * RoBrain cloud. A project's effective tags are the declared ones (set
23
+ * here, or by the developer at registration), plus the ones the org's
24
+ * tool→tag mapping derives from the tools the agent uses, minus the ones
25
+ * an admin removed. Changing a production agent's tags needs an admin.
26
+ * Self-hosted Perception has no tags (one project by decision).
27
+ */
28
+ export declare function projectsTagCommand(rawId: string, rawTags: string[], opts?: {
29
+ suppress?: string[];
30
+ unsuppress?: string[];
31
+ show?: boolean;
32
+ }): Promise<void>;
33
+ /**
34
+ * robrain tags map list the org's tool→tag mapping
35
+ * robrain tags map add <pattern> <tag> e.g. "send_email*" email
36
+ * robrain tags map remove <pattern> <tag>
37
+ * RoBrain cloud, admins. A tag is derived for an agent once a tool matching
38
+ * a pattern has been used in three turns (or was declared with the agent).
39
+ */
40
+ export declare function tagsMapCommand(action: 'list' | 'add' | 'remove', pattern?: string, tag?: string): Promise<void>;
6
41
  export declare function projectsListCommand(): Promise<void>;
7
42
  export declare function projectsMergeCommand(fromId: string, toId: string): Promise<void>;
8
43
  //# sourceMappingURL=projects.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"projects.d.ts","sourceRoot":"","sources":["../../src/commands/projects.ts"],"names":[],"mappings":"AASA,wBAAgB,kBAAkB,IAAI;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CASjE;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,GAAG,KAAK,CAKhE;AAED,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC,CA+CzD;AAED,wBAAsB,oBAAoB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAgCtF"}
1
+ {"version":3,"file":"projects.d.ts","sourceRoot":"","sources":["../../src/commands/projects.ts"],"names":[],"mappings":"AASA,wBAAgB,kBAAkB,IAAI;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CASjE;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,GAAG,KAAK,CAKhE;AAED,8FAA8F;AAC9F,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAG7D;AAED;;;;;GAKG;AACH,wBAAsB,qBAAqB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,EAAE,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA0BjH;AAED,2FAA2F;AAC3F,wBAAgB,aAAa,CAAC,GAAG,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,EAAE,CAc9D;AAqBD;;;;;;;GAOG;AACH,wBAAsB,kBAAkB,CACtC,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,EAAE,EACjB,IAAI,GAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,IAAI,CAAC,EAAE,OAAO,CAAA;CAAO,GACxE,OAAO,CAAC,IAAI,CAAC,CA+Bf;AAED;;;;;;GAMG;AACH,wBAAsB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,KAAK,GAAG,QAAQ,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA8CrH;AAED,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC,CA+CzD;AAED,wBAAsB,oBAAoB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAgCtF"}