@rulemetric/cli 0.1.1 → 0.2.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.
- package/README.md +66 -0
- package/dist/base-command.d.ts.map +1 -1
- package/dist/base-command.js +15 -0
- package/dist/base-command.js.map +1 -1
- package/dist/commands/auth/login.d.ts.map +1 -1
- package/dist/commands/auth/login.js +7 -0
- package/dist/commands/auth/login.js.map +1 -1
- package/dist/commands/crons/list.d.ts +7 -0
- package/dist/commands/crons/list.d.ts.map +1 -0
- package/dist/commands/crons/list.js +24 -0
- package/dist/commands/crons/list.js.map +1 -0
- package/dist/commands/crons/run.d.ts +13 -0
- package/dist/commands/crons/run.d.ts.map +1 -0
- package/dist/commands/crons/run.js +48 -0
- package/dist/commands/crons/run.js.map +1 -0
- package/dist/commands/evals/listen.d.ts +28 -2
- package/dist/commands/evals/listen.d.ts.map +1 -1
- package/dist/commands/evals/listen.js +159 -25
- package/dist/commands/evals/listen.js.map +1 -1
- package/dist/commands/evals/listen.test.d.ts +2 -0
- package/dist/commands/evals/listen.test.d.ts.map +1 -0
- package/dist/commands/evals/listen.test.js +48 -0
- package/dist/commands/evals/listen.test.js.map +1 -0
- package/dist/commands/gateway/ensure.js +1 -1
- package/dist/commands/gateway/ensure.js.map +1 -1
- package/dist/commands/hooks/install.d.ts.map +1 -1
- package/dist/commands/hooks/install.js +40 -3
- package/dist/commands/hooks/install.js.map +1 -1
- package/dist/commands/hooks/run.js +1 -1
- package/dist/commands/hooks/run.js.map +1 -1
- package/dist/commands/hooks/uninstall.d.ts.map +1 -1
- package/dist/commands/hooks/uninstall.js +9 -1
- package/dist/commands/hooks/uninstall.js.map +1 -1
- package/dist/commands/org/current.d.ts +7 -0
- package/dist/commands/org/current.d.ts.map +1 -0
- package/dist/commands/org/current.js +70 -0
- package/dist/commands/org/current.js.map +1 -0
- package/dist/commands/org/list.d.ts +7 -0
- package/dist/commands/org/list.d.ts.map +1 -0
- package/dist/commands/org/list.js +37 -0
- package/dist/commands/org/list.js.map +1 -0
- package/dist/commands/org/switch.d.ts +13 -0
- package/dist/commands/org/switch.d.ts.map +1 -0
- package/dist/commands/org/switch.js +52 -0
- package/dist/commands/org/switch.js.map +1 -0
- package/dist/commands/proxy/restart.d.ts +11 -0
- package/dist/commands/proxy/restart.d.ts.map +1 -0
- package/dist/commands/proxy/restart.js +36 -0
- package/dist/commands/proxy/restart.js.map +1 -0
- package/dist/commands/proxy/start.d.ts.map +1 -1
- package/dist/commands/proxy/start.js +4 -0
- package/dist/commands/proxy/start.js.map +1 -1
- package/dist/commands/service/install.d.ts +16 -0
- package/dist/commands/service/install.d.ts.map +1 -1
- package/dist/commands/service/install.js +145 -6
- package/dist/commands/service/install.js.map +1 -1
- package/dist/commands/service/uninstall.d.ts.map +1 -1
- package/dist/commands/service/uninstall.js +28 -0
- package/dist/commands/service/uninstall.js.map +1 -1
- package/dist/commands/sessions/start.d.ts.map +1 -1
- package/dist/commands/sessions/start.js +5 -0
- package/dist/commands/sessions/start.js.map +1 -1
- package/dist/commands/signals/report.d.ts +10 -0
- package/dist/commands/signals/report.d.ts.map +1 -0
- package/dist/commands/signals/report.js +35 -0
- package/dist/commands/signals/report.js.map +1 -0
- package/dist/commands/signals/report.test.d.ts +2 -0
- package/dist/commands/signals/report.test.d.ts.map +1 -0
- package/dist/commands/signals/report.test.js +65 -0
- package/dist/commands/signals/report.test.js.map +1 -0
- package/dist/commands/skills/export-approved.d.ts +10 -0
- package/dist/commands/skills/export-approved.d.ts.map +1 -0
- package/dist/commands/skills/export-approved.js +31 -0
- package/dist/commands/skills/export-approved.js.map +1 -0
- package/dist/commands/skills/publish.d.ts +17 -0
- package/dist/commands/skills/publish.d.ts.map +1 -0
- package/dist/commands/skills/publish.js +80 -0
- package/dist/commands/skills/publish.js.map +1 -0
- package/dist/commands/skills/update.d.ts +3 -0
- package/dist/commands/skills/update.d.ts.map +1 -1
- package/dist/commands/skills/update.js +17 -6
- package/dist/commands/skills/update.js.map +1 -1
- package/dist/commands/suggestions/accept.d.ts +16 -0
- package/dist/commands/suggestions/accept.d.ts.map +1 -0
- package/dist/commands/suggestions/accept.js +61 -0
- package/dist/commands/suggestions/accept.js.map +1 -0
- package/dist/commands/suggestions/accept.test.d.ts +2 -0
- package/dist/commands/suggestions/accept.test.d.ts.map +1 -0
- package/dist/commands/suggestions/accept.test.js +52 -0
- package/dist/commands/suggestions/accept.test.js.map +1 -0
- package/dist/commands/suggestions/dismiss.d.ts +10 -0
- package/dist/commands/suggestions/dismiss.d.ts.map +1 -0
- package/dist/commands/suggestions/dismiss.js +26 -0
- package/dist/commands/suggestions/dismiss.js.map +1 -0
- package/dist/commands/suggestions/list.d.ts +10 -0
- package/dist/commands/suggestions/list.d.ts.map +1 -0
- package/dist/commands/suggestions/list.js +40 -0
- package/dist/commands/suggestions/list.js.map +1 -0
- package/dist/commands/suggestions/refresh.d.ts +7 -0
- package/dist/commands/suggestions/refresh.d.ts.map +1 -0
- package/dist/commands/suggestions/refresh.js +11 -0
- package/dist/commands/suggestions/refresh.js.map +1 -0
- package/dist/dashboard/Dashboard.d.ts.map +1 -1
- package/dist/dashboard/Dashboard.js +7 -1
- package/dist/dashboard/Dashboard.js.map +1 -1
- package/dist/lib/active-org-refresh.d.ts +22 -0
- package/dist/lib/active-org-refresh.d.ts.map +1 -0
- package/dist/lib/active-org-refresh.js +108 -0
- package/dist/lib/active-org-refresh.js.map +1 -0
- package/dist/lib/active-org-refresh.test.d.ts +2 -0
- package/dist/lib/active-org-refresh.test.d.ts.map +1 -0
- package/dist/lib/active-org-refresh.test.js +190 -0
- package/dist/lib/active-org-refresh.test.js.map +1 -0
- package/dist/lib/active-org.d.ts +43 -0
- package/dist/lib/active-org.d.ts.map +1 -0
- package/dist/lib/active-org.js +96 -0
- package/dist/lib/active-org.js.map +1 -0
- package/dist/lib/active-org.test.d.ts +2 -0
- package/dist/lib/active-org.test.d.ts.map +1 -0
- package/dist/lib/active-org.test.js +147 -0
- package/dist/lib/active-org.test.js.map +1 -0
- package/dist/lib/cron-registry.d.ts +47 -0
- package/dist/lib/cron-registry.d.ts.map +1 -0
- package/dist/lib/cron-registry.js +102 -0
- package/dist/lib/cron-registry.js.map +1 -0
- package/dist/lib/cron-registry.test.d.ts +2 -0
- package/dist/lib/cron-registry.test.d.ts.map +1 -0
- package/dist/lib/cron-registry.test.js +136 -0
- package/dist/lib/cron-registry.test.js.map +1 -0
- package/dist/lib/cron-runner.d.ts +16 -0
- package/dist/lib/cron-runner.d.ts.map +1 -0
- package/dist/lib/cron-runner.js +68 -0
- package/dist/lib/cron-runner.js.map +1 -0
- package/dist/lib/detect-languages.d.ts +7 -0
- package/dist/lib/detect-languages.d.ts.map +1 -0
- package/dist/lib/detect-languages.js +113 -0
- package/dist/lib/detect-languages.js.map +1 -0
- package/dist/lib/detect-languages.test.d.ts +2 -0
- package/dist/lib/detect-languages.test.d.ts.map +1 -0
- package/dist/lib/detect-languages.test.js +29 -0
- package/dist/lib/detect-languages.test.js.map +1 -0
- package/dist/lib/eval-executor.d.ts.map +1 -1
- package/dist/lib/eval-executor.js +5 -2
- package/dist/lib/eval-executor.js.map +1 -1
- package/dist/lib/gateway-entry.js +4 -1
- package/dist/lib/gateway-entry.js.map +1 -1
- package/dist/lib/gateway-lifecycle.d.ts +1 -1
- package/dist/lib/gateway-lifecycle.d.ts.map +1 -1
- package/dist/lib/gateway-lifecycle.js +13 -2
- package/dist/lib/gateway-lifecycle.js.map +1 -1
- package/dist/lib/gateway.d.ts +4 -5
- package/dist/lib/gateway.d.ts.map +1 -1
- package/dist/lib/gateway.js +68 -2
- package/dist/lib/gateway.js.map +1 -1
- package/dist/lib/graphile-worker-runner.d.ts +124 -0
- package/dist/lib/graphile-worker-runner.d.ts.map +1 -0
- package/dist/lib/graphile-worker-runner.js +526 -0
- package/dist/lib/graphile-worker-runner.js.map +1 -0
- package/dist/lib/graphile-worker-runner.test.d.ts +2 -0
- package/dist/lib/graphile-worker-runner.test.d.ts.map +1 -0
- package/dist/lib/graphile-worker-runner.test.js +153 -0
- package/dist/lib/graphile-worker-runner.test.js.map +1 -0
- package/dist/lib/handlers/cron-close-stale-sessions.d.ts +3 -0
- package/dist/lib/handlers/cron-close-stale-sessions.d.ts.map +1 -0
- package/dist/lib/handlers/cron-close-stale-sessions.js +8 -0
- package/dist/lib/handlers/cron-close-stale-sessions.js.map +1 -0
- package/dist/lib/handlers/cron-data-integrity-audit.d.ts +3 -0
- package/dist/lib/handlers/cron-data-integrity-audit.d.ts.map +1 -0
- package/dist/lib/handlers/cron-data-integrity-audit.js +16 -0
- package/dist/lib/handlers/cron-data-integrity-audit.js.map +1 -0
- package/dist/lib/handlers/cron-refresh-skills.d.ts +3 -0
- package/dist/lib/handlers/cron-refresh-skills.d.ts.map +1 -0
- package/dist/lib/handlers/cron-refresh-skills.js +91 -0
- package/dist/lib/handlers/cron-refresh-skills.js.map +1 -0
- package/dist/lib/handlers/cron-refresh-skills.test.d.ts +2 -0
- package/dist/lib/handlers/cron-refresh-skills.test.d.ts.map +1 -0
- package/dist/lib/handlers/cron-refresh-skills.test.js +114 -0
- package/dist/lib/handlers/cron-refresh-skills.test.js.map +1 -0
- package/dist/lib/handlers/cron-regenerate-insights.d.ts +3 -0
- package/dist/lib/handlers/cron-regenerate-insights.d.ts.map +1 -0
- package/dist/lib/handlers/cron-regenerate-insights.js +6 -0
- package/dist/lib/handlers/cron-regenerate-insights.js.map +1 -0
- package/dist/lib/handlers/cron-suggest-instructions.d.ts +3 -0
- package/dist/lib/handlers/cron-suggest-instructions.d.ts.map +1 -0
- package/dist/lib/handlers/cron-suggest-instructions.js +159 -0
- package/dist/lib/handlers/cron-suggest-instructions.js.map +1 -0
- package/dist/lib/handlers/cron-suggest-instructions.test.d.ts +2 -0
- package/dist/lib/handlers/cron-suggest-instructions.test.d.ts.map +1 -0
- package/dist/lib/handlers/cron-suggest-instructions.test.js +80 -0
- package/dist/lib/handlers/cron-suggest-instructions.test.js.map +1 -0
- package/dist/lib/handlers/process-conversation.d.ts +35 -0
- package/dist/lib/handlers/process-conversation.d.ts.map +1 -0
- package/dist/lib/handlers/process-conversation.js +35 -0
- package/dist/lib/handlers/process-conversation.js.map +1 -0
- package/dist/lib/handlers/process-eval.d.ts +32 -0
- package/dist/lib/handlers/process-eval.d.ts.map +1 -0
- package/dist/lib/handlers/process-eval.js +207 -0
- package/dist/lib/handlers/process-eval.js.map +1 -0
- package/dist/lib/handlers/process-insights.d.ts +39 -0
- package/dist/lib/handlers/process-insights.d.ts.map +1 -0
- package/dist/lib/handlers/process-insights.js +300 -0
- package/dist/lib/handlers/process-insights.js.map +1 -0
- package/dist/lib/handlers/process-launch.d.ts +29 -0
- package/dist/lib/handlers/process-launch.d.ts.map +1 -0
- package/dist/lib/handlers/process-launch.js +41 -0
- package/dist/lib/handlers/process-launch.js.map +1 -0
- package/dist/lib/hooks-config.d.ts +28 -4
- package/dist/lib/hooks-config.d.ts.map +1 -1
- package/dist/lib/hooks-config.js +138 -10
- package/dist/lib/hooks-config.js.map +1 -1
- package/dist/lib/llm-client.d.ts.map +1 -1
- package/dist/lib/llm-client.js +149 -16
- package/dist/lib/llm-client.js.map +1 -1
- package/dist/lib/mirror-writer-db.d.ts +12 -0
- package/dist/lib/mirror-writer-db.d.ts.map +1 -0
- package/dist/lib/mirror-writer-db.js +51 -0
- package/dist/lib/mirror-writer-db.js.map +1 -0
- package/dist/lib/mirror-writer.d.ts +35 -0
- package/dist/lib/mirror-writer.d.ts.map +1 -0
- package/dist/lib/mirror-writer.js +27 -0
- package/dist/lib/mirror-writer.js.map +1 -0
- package/dist/lib/mirror-writer.test.d.ts +2 -0
- package/dist/lib/mirror-writer.test.d.ts.map +1 -0
- package/dist/lib/mirror-writer.test.js +47 -0
- package/dist/lib/mirror-writer.test.js.map +1 -0
- package/dist/lib/permanent-job-error.d.ts +17 -0
- package/dist/lib/permanent-job-error.d.ts.map +1 -0
- package/dist/lib/permanent-job-error.js +23 -0
- package/dist/lib/permanent-job-error.js.map +1 -0
- package/dist/lib/permanent-job-error.test.d.ts +2 -0
- package/dist/lib/permanent-job-error.test.d.ts.map +1 -0
- package/dist/lib/permanent-job-error.test.js +29 -0
- package/dist/lib/permanent-job-error.test.js.map +1 -0
- package/dist/lib/version-check.d.ts +11 -0
- package/dist/lib/version-check.d.ts.map +1 -0
- package/dist/lib/version-check.js +106 -0
- package/dist/lib/version-check.js.map +1 -0
- package/oclif.manifest.json +611 -81
- package/package.json +19 -5
- package/dist/commands/insights/sync.d.ts +0 -17
- package/dist/commands/insights/sync.d.ts.map +0 -1
- package/dist/commands/insights/sync.js +0 -477
- package/dist/commands/insights/sync.js.map +0 -1
- package/dist/lib/eval-worker.d.ts +0 -12
- package/dist/lib/eval-worker.d.ts.map +0 -1
- package/dist/lib/eval-worker.js +0 -395
- package/dist/lib/eval-worker.js.map +0 -1
- package/dist/lib/insights-worker.d.ts +0 -10
- package/dist/lib/insights-worker.d.ts.map +0 -1
- package/dist/lib/insights-worker.js +0 -329
- package/dist/lib/insights-worker.js.map +0 -1
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import * as fs from 'node:fs';
|
|
2
|
+
import * as path from 'node:path';
|
|
3
|
+
import { Args, Flags } from '@oclif/core';
|
|
4
|
+
import { BaseCommand } from '../../base-command.js';
|
|
5
|
+
import { apiPost } from '../../lib/api-client.js';
|
|
6
|
+
export default class SkillsPublish extends BaseCommand {
|
|
7
|
+
static description = 'Submit a skill file to the RuleMetric skills registry';
|
|
8
|
+
static examples = [
|
|
9
|
+
'<%= config.bin %> skills publish ./my-skill.md',
|
|
10
|
+
'<%= config.bin %> skills publish ./my-skill.md --category workflow --tool claude_code',
|
|
11
|
+
];
|
|
12
|
+
static args = {
|
|
13
|
+
file: Args.string({ description: 'Path to skill file (.md)', required: true }),
|
|
14
|
+
};
|
|
15
|
+
static flags = {
|
|
16
|
+
name: Flags.string({ description: 'Skill name (defaults to filename)' }),
|
|
17
|
+
description: Flags.string({ description: 'One-line description' }),
|
|
18
|
+
category: Flags.string({
|
|
19
|
+
description: 'Skill category',
|
|
20
|
+
options: [
|
|
21
|
+
'workflow', 'language', 'framework', 'tool', 'security',
|
|
22
|
+
'testing', 'architecture', 'devops', 'documentation',
|
|
23
|
+
'performance', 'other',
|
|
24
|
+
],
|
|
25
|
+
default: 'other',
|
|
26
|
+
}),
|
|
27
|
+
tool: Flags.string({
|
|
28
|
+
description: 'Primary tool this skill targets',
|
|
29
|
+
options: ['claude_code', 'cursor', 'copilot', 'windsurf', 'universal'],
|
|
30
|
+
default: 'universal',
|
|
31
|
+
}),
|
|
32
|
+
tags: Flags.string({ description: 'Comma-separated tags', default: '' }),
|
|
33
|
+
};
|
|
34
|
+
async run() {
|
|
35
|
+
const { args, flags } = await this.parse(SkillsPublish);
|
|
36
|
+
this.requireAuth();
|
|
37
|
+
const filePath = path.resolve(args.file);
|
|
38
|
+
if (!fs.existsSync(filePath)) {
|
|
39
|
+
this.error(`File not found: ${filePath}`);
|
|
40
|
+
}
|
|
41
|
+
const content = fs.readFileSync(filePath, 'utf-8');
|
|
42
|
+
if (content.trim().length < 20) {
|
|
43
|
+
this.error('Skill content is too short (minimum 20 characters)');
|
|
44
|
+
}
|
|
45
|
+
const basename = path.basename(filePath, path.extname(filePath));
|
|
46
|
+
const name = flags.name ?? basename
|
|
47
|
+
.replace(/[-_]+/g, ' ')
|
|
48
|
+
.replace(/\b\w/g, c => c.toUpperCase());
|
|
49
|
+
const id = basename.toLowerCase().replace(/[^a-z0-9]+/g, '-').replace(/^-|-$/g, '');
|
|
50
|
+
const tags = flags.tags
|
|
51
|
+
? flags.tags.split(',').map(t => t.trim()).filter(Boolean)
|
|
52
|
+
: [];
|
|
53
|
+
this.log(`Publishing skill: ${name} (${id})`);
|
|
54
|
+
this.log(` Category: ${flags.category}`);
|
|
55
|
+
this.log(` Tool: ${flags.tool}`);
|
|
56
|
+
if (tags.length > 0)
|
|
57
|
+
this.log(` Tags: ${tags.join(', ')}`);
|
|
58
|
+
this.log(` Content: ${content.length} characters\n`);
|
|
59
|
+
const payload = {
|
|
60
|
+
id,
|
|
61
|
+
name,
|
|
62
|
+
description: flags.description ?? `Community skill: ${name}`,
|
|
63
|
+
category: flags.category,
|
|
64
|
+
tools: [flags.tool],
|
|
65
|
+
tags,
|
|
66
|
+
content,
|
|
67
|
+
};
|
|
68
|
+
try {
|
|
69
|
+
const result = await apiPost('/api/skills/publish', payload);
|
|
70
|
+
this.log(`Published! ${result.message ?? `Skill "${name}" submitted to the registry.`}`);
|
|
71
|
+
}
|
|
72
|
+
catch (err) {
|
|
73
|
+
if (err instanceof Error) {
|
|
74
|
+
this.error(`Failed to publish: ${err.message}`);
|
|
75
|
+
}
|
|
76
|
+
throw err;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=publish.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"publish.js","sourceRoot":"","sources":["../../../src/commands/skills/publish.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,6 +2,9 @@ import { BaseCommand } from '../../base-command.js';
|
|
|
2
2
|
export default class SkillsUpdate extends BaseCommand {
|
|
3
3
|
static description: string;
|
|
4
4
|
static examples: string[];
|
|
5
|
+
static flags: {
|
|
6
|
+
all: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
7
|
+
};
|
|
5
8
|
run(): Promise<void>;
|
|
6
9
|
}
|
|
7
10
|
//# sourceMappingURL=update.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../../src/commands/skills/update.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../../src/commands/skills/update.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAOpD,MAAM,CAAC,OAAO,OAAO,YAAa,SAAQ,WAAW;IACnD,OAAgB,WAAW,SAAuE;IAElG,OAAgB,QAAQ,WAGtB;IAEF,OAAgB,KAAK;;MAEnB;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CA4B3B"}
|
|
@@ -1,30 +1,41 @@
|
|
|
1
1
|
import * as fs from 'node:fs';
|
|
2
2
|
import * as path from 'node:path';
|
|
3
3
|
import * as os from 'node:os';
|
|
4
|
+
import { Flags } from '@oclif/core';
|
|
4
5
|
import { BaseCommand } from '../../base-command.js';
|
|
5
|
-
import { fetchAllSources, TIER_1_SOURCES } from '@rulemetric/skills-registry';
|
|
6
|
+
import { fetchAllSources, TIER_1_SOURCES, TIER_2_SOURCES } from '@rulemetric/skills-registry';
|
|
6
7
|
const CACHE_DIR = path.join(os.homedir(), '.config', 'rulemetric');
|
|
7
8
|
const REGISTRY_PATH = path.join(CACHE_DIR, 'skills-registry.json');
|
|
8
9
|
export default class SkillsUpdate extends BaseCommand {
|
|
9
10
|
static description = 'Fetch latest skills from GitHub sources and update local registry';
|
|
10
11
|
static examples = [
|
|
11
12
|
'<%= config.bin %> skills update',
|
|
13
|
+
'<%= config.bin %> skills update --all',
|
|
12
14
|
];
|
|
15
|
+
static flags = {
|
|
16
|
+
all: Flags.boolean({ description: 'Include Tier 2 (niche) sources', default: false }),
|
|
17
|
+
};
|
|
13
18
|
async run() {
|
|
14
|
-
|
|
15
|
-
const
|
|
16
|
-
|
|
19
|
+
const { flags } = await this.parse(SkillsUpdate);
|
|
20
|
+
const sources = flags.all
|
|
21
|
+
? [...TIER_1_SOURCES, ...TIER_2_SOURCES]
|
|
22
|
+
: TIER_1_SOURCES;
|
|
23
|
+
this.log(`Fetching skills from ${sources.length} sources${flags.all ? ' (Tier 1 + 2)' : ''}...\n`);
|
|
24
|
+
const result = await fetchAllSources(sources, {
|
|
25
|
+
onProgress: (source, count) => {
|
|
26
|
+
this.log(` ${source}: ${count} skills`);
|
|
27
|
+
},
|
|
17
28
|
});
|
|
18
29
|
const registry = {
|
|
19
30
|
version: '1.0.0',
|
|
20
31
|
generatedAt: new Date().toISOString(),
|
|
21
|
-
skills: entries,
|
|
32
|
+
skills: result.entries,
|
|
22
33
|
};
|
|
23
34
|
if (!fs.existsSync(CACHE_DIR)) {
|
|
24
35
|
fs.mkdirSync(CACHE_DIR, { recursive: true });
|
|
25
36
|
}
|
|
26
37
|
fs.writeFileSync(REGISTRY_PATH, JSON.stringify(registry));
|
|
27
|
-
this.log(`\nUpdated registry: ${entries.length} skills cached at ${REGISTRY_PATH}`);
|
|
38
|
+
this.log(`\nUpdated registry: ${result.entries.length} skills cached at ${REGISTRY_PATH}`);
|
|
28
39
|
}
|
|
29
40
|
}
|
|
30
41
|
//# sourceMappingURL=update.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../../src/commands/skills/update.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../../src/commands/skills/update.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAG9F,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC;AACnE,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,sBAAsB,CAAC,CAAC;AAEnE,MAAM,CAAC,OAAO,OAAO,YAAa,SAAQ,WAAW;IACnD,MAAM,CAAU,WAAW,GAAG,mEAAmE,CAAC;IAElG,MAAM,CAAU,QAAQ,GAAG;QACzB,iCAAiC;QACjC,uCAAuC;KACxC,CAAC;IAEF,MAAM,CAAU,KAAK,GAAG;QACtB,GAAG,EAAE,KAAK,CAAC,OAAO,CAAC,EAAE,WAAW,EAAE,gCAAgC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;KACtF,CAAC;IAEF,KAAK,CAAC,GAAG;QACP,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;QAEjD,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG;YACvB,CAAC,CAAC,CAAC,GAAG,cAAc,EAAE,GAAG,cAAc,CAAC;YACxC,CAAC,CAAC,cAAc,CAAC;QAEnB,IAAI,CAAC,GAAG,CAAC,wBAAwB,OAAO,CAAC,MAAM,WAAW,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;QAEnG,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,OAAO,EAAE;YAC5C,UAAU,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;gBAC5B,IAAI,CAAC,GAAG,CAAC,KAAK,MAAM,KAAK,KAAK,SAAS,CAAC,CAAC;YAC3C,CAAC;SACF,CAAC,CAAC;QAEH,MAAM,QAAQ,GAAkB;YAC9B,OAAO,EAAE,OAAO;YAChB,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACrC,MAAM,EAAE,MAAM,CAAC,OAAO;SACvB,CAAC;QAEF,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YAC9B,EAAE,CAAC,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC/C,CAAC;QAED,EAAE,CAAC,aAAa,CAAC,aAAa,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC1D,IAAI,CAAC,GAAG,CAAC,uBAAuB,MAAM,CAAC,OAAO,CAAC,MAAM,qBAAqB,aAAa,EAAE,CAAC,CAAC;IAC7F,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { BaseCommand } from '../../base-command.js';
|
|
2
|
+
/**
|
|
3
|
+
* Append an instruction block to CLAUDE.md in the given directory. Idempotent:
|
|
4
|
+
* skips if a block with the same instructionId already exists. Returns true if
|
|
5
|
+
* the file was modified, false if the block was already present.
|
|
6
|
+
*/
|
|
7
|
+
export declare function appendToCLAUDEmd(dir: string, instructionId: string, content: string): boolean;
|
|
8
|
+
export default class SuggestionsAccept extends BaseCommand {
|
|
9
|
+
static description: string;
|
|
10
|
+
static examples: string[];
|
|
11
|
+
static args: {
|
|
12
|
+
id: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
|
|
13
|
+
};
|
|
14
|
+
run(): Promise<void>;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=accept.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"accept.d.ts","sourceRoot":"","sources":["../../../src/commands/suggestions/accept.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAmBpD;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAkB7F;AAED,MAAM,CAAC,OAAO,OAAO,iBAAkB,SAAQ,WAAW;IACtD,OAAgB,WAAW,SAAiE;IAE5F,OAAgB,QAAQ,WAEtB;IAEF,OAAgB,IAAI;;MAElB;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAsC7B"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import * as fs from 'node:fs';
|
|
2
|
+
import * as path from 'node:path';
|
|
3
|
+
import { Args } from '@oclif/core';
|
|
4
|
+
import { normalizeProjectPath } from '@rulemetric/core/paths';
|
|
5
|
+
import { BaseCommand } from '../../base-command.js';
|
|
6
|
+
import { apiGet, apiPost } from '../../lib/api-client.js';
|
|
7
|
+
import { validateUuid } from '../../lib/types.js';
|
|
8
|
+
/**
|
|
9
|
+
* Append an instruction block to CLAUDE.md in the given directory. Idempotent:
|
|
10
|
+
* skips if a block with the same instructionId already exists. Returns true if
|
|
11
|
+
* the file was modified, false if the block was already present.
|
|
12
|
+
*/
|
|
13
|
+
export function appendToCLAUDEmd(dir, instructionId, content) {
|
|
14
|
+
const filePath = path.join(dir, 'CLAUDE.md');
|
|
15
|
+
const startTag = `<!-- rulemetric:start ${instructionId} -->`;
|
|
16
|
+
const endTag = `<!-- rulemetric:end ${instructionId} -->`;
|
|
17
|
+
const existing = fs.existsSync(filePath) ? fs.readFileSync(filePath, 'utf8') : '';
|
|
18
|
+
if (existing.includes(startTag)) {
|
|
19
|
+
return false;
|
|
20
|
+
}
|
|
21
|
+
const separator = existing.length > 0 && !existing.endsWith('\n')
|
|
22
|
+
? '\n\n'
|
|
23
|
+
: existing.length > 0 ? '\n' : '';
|
|
24
|
+
const block = `${separator}\n${startTag}\n${content}\n${endTag}\n`;
|
|
25
|
+
fs.writeFileSync(filePath, existing + block, 'utf8');
|
|
26
|
+
return true;
|
|
27
|
+
}
|
|
28
|
+
export default class SuggestionsAccept extends BaseCommand {
|
|
29
|
+
static description = 'Accept a suggestion and append the instruction to CLAUDE.md';
|
|
30
|
+
static examples = [
|
|
31
|
+
'<%= config.bin %> suggestions accept <id>',
|
|
32
|
+
];
|
|
33
|
+
static args = {
|
|
34
|
+
id: Args.string({ description: 'Suggestion UUID from `suggestions list`', required: true }),
|
|
35
|
+
};
|
|
36
|
+
async run() {
|
|
37
|
+
const { args } = await this.parse(SuggestionsAccept);
|
|
38
|
+
this.requireAuth();
|
|
39
|
+
validateUuid(args.id, 'suggestion ID');
|
|
40
|
+
const projectPath = normalizeProjectPath(process.cwd());
|
|
41
|
+
const suggestion = await apiGet(`/api/instruction-suggestions/${encodeURIComponent(args.id)}`);
|
|
42
|
+
let effectiveInstructionId = suggestion.instructionId;
|
|
43
|
+
if (suggestion.instructionScope === 'public') {
|
|
44
|
+
const promoted = await apiPost(`/api/instructions/${encodeURIComponent(suggestion.instructionId)}/promote-from-public`, { targetScope: 'personal' });
|
|
45
|
+
effectiveInstructionId = promoted.instructionId;
|
|
46
|
+
}
|
|
47
|
+
const instruction = await apiGet(`/api/instructions/${encodeURIComponent(effectiveInstructionId)}`);
|
|
48
|
+
const modified = appendToCLAUDEmd(process.cwd(), effectiveInstructionId, instruction.content);
|
|
49
|
+
if (!modified) {
|
|
50
|
+
this.log(`Already present: ${instruction.name} is already in CLAUDE.md (block id: ${effectiveInstructionId}).`);
|
|
51
|
+
}
|
|
52
|
+
else {
|
|
53
|
+
this.log(`Accepted: added ${instruction.name} to CLAUDE.md. It will be active starting in your next session.`);
|
|
54
|
+
}
|
|
55
|
+
await apiPost(`/api/instruction-suggestions/${encodeURIComponent(args.id)}/events`, {
|
|
56
|
+
eventType: 'accepted',
|
|
57
|
+
projectPath,
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=accept.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"accept.js","sourceRoot":"","sources":["../../../src/commands/suggestions/accept.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AACnC,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAiBlD;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,GAAW,EAAE,aAAqB,EAAE,OAAe;IAChF,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;IAC7C,MAAM,QAAQ,GAAG,yBAAyB,aAAa,MAAM,CAAC;IAC9D,MAAM,MAAM,GAAG,uBAAuB,aAAa,MAAM,CAAC;IAE1D,MAAM,QAAQ,GAAG,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAElF,IAAI,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC9B,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,MAAM,SAAS,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC;QAC7D,CAAC,CAAC,MAAM;QACR,CAAC,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;IACtC,MAAM,KAAK,GAAG,GAAG,SAAS,KAAK,QAAQ,KAAK,OAAO,KAAK,MAAM,IAAI,CAAC;IAEnE,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,QAAQ,GAAG,KAAK,EAAE,MAAM,CAAC,CAAC;IACrD,OAAO,IAAI,CAAC;AAChB,CAAC;AAED,MAAM,CAAC,OAAO,OAAO,iBAAkB,SAAQ,WAAW;IACtD,MAAM,CAAU,WAAW,GAAG,6DAA6D,CAAC;IAE5F,MAAM,CAAU,QAAQ,GAAG;QACvB,2CAA2C;KAC9C,CAAC;IAEF,MAAM,CAAU,IAAI,GAAG;QACnB,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,yCAAyC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;KAC9F,CAAC;IAEF,KAAK,CAAC,GAAG;QACL,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;QACrD,IAAI,CAAC,WAAW,EAAE,CAAC;QACnB,YAAY,CAAC,IAAI,CAAC,EAAE,EAAE,eAAe,CAAC,CAAC;QAEvC,MAAM,WAAW,GAAG,oBAAoB,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;QAExD,MAAM,UAAU,GAAG,MAAM,MAAM,CAC3B,gCAAgC,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAChE,CAAC;QAEF,IAAI,sBAAsB,GAAG,UAAU,CAAC,aAAa,CAAC;QAEtD,IAAI,UAAU,CAAC,gBAAgB,KAAK,QAAQ,EAAE,CAAC;YAC3C,MAAM,QAAQ,GAAG,MAAM,OAAO,CAC1B,qBAAqB,kBAAkB,CAAC,UAAU,CAAC,aAAa,CAAC,sBAAsB,EACvF,EAAE,WAAW,EAAE,UAAU,EAAE,CAC9B,CAAC;YACF,sBAAsB,GAAG,QAAQ,CAAC,aAAa,CAAC;QACpD,CAAC;QAED,MAAM,WAAW,GAAG,MAAM,MAAM,CAC5B,qBAAqB,kBAAkB,CAAC,sBAAsB,CAAC,EAAE,CACpE,CAAC;QAEF,MAAM,QAAQ,GAAG,gBAAgB,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,sBAAsB,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC;QAE9F,IAAI,CAAC,QAAQ,EAAE,CAAC;YACZ,IAAI,CAAC,GAAG,CAAC,oBAAoB,WAAW,CAAC,IAAI,uCAAuC,sBAAsB,IAAI,CAAC,CAAC;QACpH,CAAC;aAAM,CAAC;YACJ,IAAI,CAAC,GAAG,CAAC,mBAAmB,WAAW,CAAC,IAAI,iEAAiE,CAAC,CAAC;QACnH,CAAC;QAED,MAAM,OAAO,CAAC,gCAAgC,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC,SAAS,EAAE;YAChF,SAAS,EAAE,UAAU;YACrB,WAAW;SACd,CAAC,CAAC;IACP,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"accept.test.d.ts","sourceRoot":"","sources":["../../../src/commands/suggestions/accept.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import * as fs from 'node:fs';
|
|
2
|
+
import * as os from 'node:os';
|
|
3
|
+
import * as path from 'node:path';
|
|
4
|
+
import { describe, it, expect, beforeEach, afterEach } from 'vitest';
|
|
5
|
+
import { appendToCLAUDEmd } from './accept.js';
|
|
6
|
+
const INSTRUCTION_ID = '11111111-1111-1111-1111-111111111111';
|
|
7
|
+
const CONTENT = '## My Rule\nAlways write tests.';
|
|
8
|
+
describe('appendToCLAUDEmd', () => {
|
|
9
|
+
let tmpDir;
|
|
10
|
+
beforeEach(() => {
|
|
11
|
+
tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), 'rulemetric-test-'));
|
|
12
|
+
});
|
|
13
|
+
afterEach(() => {
|
|
14
|
+
fs.rmSync(tmpDir, { recursive: true, force: true });
|
|
15
|
+
});
|
|
16
|
+
it('creates CLAUDE.md when the file does not exist', () => {
|
|
17
|
+
const claudePath = path.join(tmpDir, 'CLAUDE.md');
|
|
18
|
+
expect(fs.existsSync(claudePath)).toBe(false);
|
|
19
|
+
const modified = appendToCLAUDEmd(tmpDir, INSTRUCTION_ID, CONTENT);
|
|
20
|
+
expect(modified).toBe(true);
|
|
21
|
+
expect(fs.existsSync(claudePath)).toBe(true);
|
|
22
|
+
const written = fs.readFileSync(claudePath, 'utf8');
|
|
23
|
+
expect(written).toContain(`<!-- rulemetric:start ${INSTRUCTION_ID} -->`);
|
|
24
|
+
expect(written).toContain(CONTENT);
|
|
25
|
+
expect(written).toContain(`<!-- rulemetric:end ${INSTRUCTION_ID} -->`);
|
|
26
|
+
});
|
|
27
|
+
it('appends the block when CLAUDE.md exists but does not contain the block', () => {
|
|
28
|
+
const claudePath = path.join(tmpDir, 'CLAUDE.md');
|
|
29
|
+
const initial = '# My Project\n\nSome existing content.\n';
|
|
30
|
+
fs.writeFileSync(claudePath, initial, 'utf8');
|
|
31
|
+
const modified = appendToCLAUDEmd(tmpDir, INSTRUCTION_ID, CONTENT);
|
|
32
|
+
expect(modified).toBe(true);
|
|
33
|
+
const written = fs.readFileSync(claudePath, 'utf8');
|
|
34
|
+
expect(written).toContain('Some existing content.');
|
|
35
|
+
expect(written).toContain(`<!-- rulemetric:start ${INSTRUCTION_ID} -->`);
|
|
36
|
+
const startIdx = written.indexOf('Some existing content.');
|
|
37
|
+
const blockIdx = written.indexOf(`<!-- rulemetric:start ${INSTRUCTION_ID} -->`);
|
|
38
|
+
expect(blockIdx).toBeGreaterThan(startIdx);
|
|
39
|
+
});
|
|
40
|
+
it('skips the append when the block is already present (idempotent)', () => {
|
|
41
|
+
const claudePath = path.join(tmpDir, 'CLAUDE.md');
|
|
42
|
+
const startTag = `<!-- rulemetric:start ${INSTRUCTION_ID} -->`;
|
|
43
|
+
const endTag = `<!-- rulemetric:end ${INSTRUCTION_ID} -->`;
|
|
44
|
+
const existing = `# Existing\n\n${startTag}\n${CONTENT}\n${endTag}\n`;
|
|
45
|
+
fs.writeFileSync(claudePath, existing, 'utf8');
|
|
46
|
+
const modified = appendToCLAUDEmd(tmpDir, INSTRUCTION_ID, CONTENT);
|
|
47
|
+
expect(modified).toBe(false);
|
|
48
|
+
const written = fs.readFileSync(claudePath, 'utf8');
|
|
49
|
+
expect(written).toBe(existing);
|
|
50
|
+
});
|
|
51
|
+
});
|
|
52
|
+
//# sourceMappingURL=accept.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"accept.test.js","sourceRoot":"","sources":["../../../src/commands/suggestions/accept.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { BaseCommand } from '../../base-command.js';
|
|
2
|
+
export default class SuggestionsDismiss extends BaseCommand {
|
|
3
|
+
static description: string;
|
|
4
|
+
static examples: string[];
|
|
5
|
+
static args: {
|
|
6
|
+
id: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
|
|
7
|
+
};
|
|
8
|
+
run(): Promise<void>;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=dismiss.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dismiss.d.ts","sourceRoot":"","sources":["../../../src/commands/suggestions/dismiss.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAIpD,MAAM,CAAC,OAAO,OAAO,kBAAmB,SAAQ,WAAW;IACvD,OAAgB,WAAW,SAAgE;IAE3F,OAAgB,QAAQ,WAEtB;IAEF,OAAgB,IAAI;;MAElB;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAc7B"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { Args } from '@oclif/core';
|
|
2
|
+
import { normalizeProjectPath } from '@rulemetric/core/paths';
|
|
3
|
+
import { BaseCommand } from '../../base-command.js';
|
|
4
|
+
import { apiPost } from '../../lib/api-client.js';
|
|
5
|
+
import { validateUuid } from '../../lib/types.js';
|
|
6
|
+
export default class SuggestionsDismiss extends BaseCommand {
|
|
7
|
+
static description = 'Dismiss a suggestion so it will not re-surface for 30 days';
|
|
8
|
+
static examples = [
|
|
9
|
+
'<%= config.bin %> suggestions dismiss <id>',
|
|
10
|
+
];
|
|
11
|
+
static args = {
|
|
12
|
+
id: Args.string({ description: 'Suggestion UUID from `suggestions list`', required: true }),
|
|
13
|
+
};
|
|
14
|
+
async run() {
|
|
15
|
+
const { args } = await this.parse(SuggestionsDismiss);
|
|
16
|
+
this.requireAuth();
|
|
17
|
+
validateUuid(args.id, 'suggestion ID');
|
|
18
|
+
const projectPath = normalizeProjectPath(process.cwd());
|
|
19
|
+
await apiPost(`/api/instruction-suggestions/${encodeURIComponent(args.id)}/events`, {
|
|
20
|
+
eventType: 'dismissed',
|
|
21
|
+
projectPath,
|
|
22
|
+
});
|
|
23
|
+
this.log("Dismissed. Won't re-surface for 30 days.");
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=dismiss.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dismiss.js","sourceRoot":"","sources":["../../../src/commands/suggestions/dismiss.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AACnC,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,MAAM,CAAC,OAAO,OAAO,kBAAmB,SAAQ,WAAW;IACvD,MAAM,CAAU,WAAW,GAAG,4DAA4D,CAAC;IAE3F,MAAM,CAAU,QAAQ,GAAG;QACvB,4CAA4C;KAC/C,CAAC;IAEF,MAAM,CAAU,IAAI,GAAG;QACnB,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,yCAAyC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;KAC9F,CAAC;IAEF,KAAK,CAAC,GAAG;QACL,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;QACtD,IAAI,CAAC,WAAW,EAAE,CAAC;QACnB,YAAY,CAAC,IAAI,CAAC,EAAE,EAAE,eAAe,CAAC,CAAC;QAEvC,MAAM,WAAW,GAAG,oBAAoB,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;QAExD,MAAM,OAAO,CAAC,gCAAgC,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC,SAAS,EAAE;YAChF,SAAS,EAAE,WAAW;YACtB,WAAW;SACd,CAAC,CAAC;QAEH,IAAI,CAAC,GAAG,CAAC,0CAA0C,CAAC,CAAC;IACzD,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { BaseCommand } from '../../base-command.js';
|
|
2
|
+
export default class SuggestionsList extends BaseCommand {
|
|
3
|
+
static description: string;
|
|
4
|
+
static examples: string[];
|
|
5
|
+
static flags: {
|
|
6
|
+
project: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
7
|
+
};
|
|
8
|
+
run(): Promise<void>;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=list.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../src/commands/suggestions/list.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAoBpD,MAAM,CAAC,OAAO,OAAO,eAAgB,SAAQ,WAAW;IACpD,OAAgB,WAAW,SAAgD;IAE3E,OAAgB,QAAQ,WAGtB;IAEF,OAAgB,KAAK;;MAKnB;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CA4B7B"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { Flags } from '@oclif/core';
|
|
2
|
+
import { printTable } from '@oclif/table';
|
|
3
|
+
import { normalizeProjectPath } from '@rulemetric/core/paths';
|
|
4
|
+
import { BaseCommand } from '../../base-command.js';
|
|
5
|
+
import { apiGet } from '../../lib/api-client.js';
|
|
6
|
+
export default class SuggestionsList extends BaseCommand {
|
|
7
|
+
static description = 'List instruction suggestions for a project';
|
|
8
|
+
static examples = [
|
|
9
|
+
'<%= config.bin %> suggestions list',
|
|
10
|
+
'<%= config.bin %> suggestions list --project /path/to/project',
|
|
11
|
+
];
|
|
12
|
+
static flags = {
|
|
13
|
+
project: Flags.string({
|
|
14
|
+
char: 'p',
|
|
15
|
+
description: 'Project path (defaults to current directory)',
|
|
16
|
+
}),
|
|
17
|
+
};
|
|
18
|
+
async run() {
|
|
19
|
+
const { flags } = await this.parse(SuggestionsList);
|
|
20
|
+
this.requireAuth();
|
|
21
|
+
const projectPath = normalizeProjectPath(flags.project ?? process.cwd());
|
|
22
|
+
const encoded = encodeURIComponent(projectPath);
|
|
23
|
+
const result = await apiGet(`/api/instruction-suggestions?projectPath=${encoded}&limit=10`);
|
|
24
|
+
if (result.suggestions.length === 0) {
|
|
25
|
+
this.log('No suggestions for this project. The cron runs daily at 04:30; trigger now with: rulemetric suggestions refresh');
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
printTable({
|
|
29
|
+
data: result.suggestions.map((s) => ({
|
|
30
|
+
ID: s.id,
|
|
31
|
+
Scope: s.instructionScope,
|
|
32
|
+
Name: s.name,
|
|
33
|
+
Score: s.score.toFixed(2),
|
|
34
|
+
Reason: s.reason.length > 60 ? s.reason.slice(0, 59) + '…' : s.reason,
|
|
35
|
+
})),
|
|
36
|
+
columns: ['ID', 'Scope', 'Name', 'Score', 'Reason'],
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=list.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list.js","sourceRoot":"","sources":["../../../src/commands/suggestions/list.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AAmBjD,MAAM,CAAC,OAAO,OAAO,eAAgB,SAAQ,WAAW;IACpD,MAAM,CAAU,WAAW,GAAG,4CAA4C,CAAC;IAE3E,MAAM,CAAU,QAAQ,GAAG;QACvB,oCAAoC;QACpC,+DAA+D;KAClE,CAAC;IAEF,MAAM,CAAU,KAAK,GAAG;QACpB,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC;YAClB,IAAI,EAAE,GAAG;YACT,WAAW,EAAE,8CAA8C;SAC9D,CAAC;KACL,CAAC;IAEF,KAAK,CAAC,GAAG;QACL,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;QACpD,IAAI,CAAC,WAAW,EAAE,CAAC;QAEnB,MAAM,WAAW,GAAG,oBAAoB,CAAC,KAAK,CAAC,OAAO,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;QACzE,MAAM,OAAO,GAAG,kBAAkB,CAAC,WAAW,CAAC,CAAC;QAChD,MAAM,MAAM,GAAG,MAAM,MAAM,CACvB,4CAA4C,OAAO,WAAW,CACjE,CAAC;QAEF,IAAI,MAAM,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAClC,IAAI,CAAC,GAAG,CACJ,iHAAiH,CACpH,CAAC;YACF,OAAO;QACX,CAAC;QAED,UAAU,CAAC;YACP,IAAI,EAAE,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBACjC,EAAE,EAAE,CAAC,CAAC,EAAE;gBACR,KAAK,EAAE,CAAC,CAAC,gBAAgB;gBACzB,IAAI,EAAE,CAAC,CAAC,IAAI;gBACZ,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;gBACzB,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM;aACxE,CAAC,CAAC;YACH,OAAO,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC;SACtD,CAAC,CAAC;IACP,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"refresh.d.ts","sourceRoot":"","sources":["../../../src/commands/suggestions/refresh.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEpD,MAAM,CAAC,OAAO,OAAO,kBAAmB,SAAQ,WAAW;IACvD,OAAgB,WAAW,SAA0D;IAErF,OAAgB,QAAQ,WAEtB;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAK7B"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { BaseCommand } from '../../base-command.js';
|
|
2
|
+
export default class SuggestionsRefresh extends BaseCommand {
|
|
3
|
+
static description = 'Information about refreshing instruction suggestions';
|
|
4
|
+
static examples = [
|
|
5
|
+
'<%= config.bin %> suggestions refresh',
|
|
6
|
+
];
|
|
7
|
+
async run() {
|
|
8
|
+
this.log('The suggestion cron runs daily at 04:30. To force a recompute now, restart the worker (`rulemetric service restart`) and the cron will fire on its registered schedule.');
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=refresh.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"refresh.js","sourceRoot":"","sources":["../../../src/commands/suggestions/refresh.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEpD,MAAM,CAAC,OAAO,OAAO,kBAAmB,SAAQ,WAAW;IACvD,MAAM,CAAU,WAAW,GAAG,sDAAsD,CAAC;IAErF,MAAM,CAAU,QAAQ,GAAG;QACvB,uCAAuC;KAC1C,CAAC;IAEF,KAAK,CAAC,GAAG;QACL,IAAI,CAAC,GAAG,CACJ,yKAAyK,CAC5K,CAAC;IACN,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Dashboard.d.ts","sourceRoot":"","sources":["../../src/dashboard/Dashboard.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAA2B,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"Dashboard.d.ts","sourceRoot":"","sources":["../../src/dashboard/Dashboard.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAA2B,MAAM,YAAY,CAAC;AA6JlE,wBAAsB,eAAe,CAAC,MAAM,GAAE,MAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAkC5E"}
|
|
@@ -21,7 +21,7 @@ function PeriodTabs({ active, providerName }) {
|
|
|
21
21
|
return (_jsxs(Box, { justifyContent: "space-between", paddingX: 1, children: [_jsx(Box, { gap: 1, children: PERIODS.map(p => (_jsx(Text, { bold: active === p, color: active === p ? ORANGE : DIM, children: active === p ? `[ ${PERIOD_LABELS[p]} ]` : ` ${PERIOD_LABELS[p]} ` }, p))) }), providerName && (_jsx(Text, { color: ORANGE, bold: true, children: providerName }))] }));
|
|
22
22
|
}
|
|
23
23
|
function StatusBar({ width, insightsFocused = false }) {
|
|
24
|
-
return (_jsx(Box, { borderStyle: "round", borderColor: DIM, width: width, justifyContent: "center", paddingX: 1, children: _jsxs(Text, { children: [_jsx(Text, { color: ORANGE, bold: true, children: '<' }), _jsx(Text, { color: ORANGE, children: '>' }), _jsx(Text, { dimColor: true, children: " switch " }), _jsx(Text, { color: ORANGE, bold: true, children: "q" }), _jsx(Text, { dimColor: true, children: " quit " }), _jsx(Text, { color: ORANGE, bold: true, children: "s" }), _jsxs(Text, { dimColor: true, children: [" ", insightsFocused ? 'back' : 'suggestions', " "] }), _jsx(Text, { color: ORANGE, bold: true, children: "1" }), _jsx(Text, { dimColor: true, children: "-" }), _jsx(Text, { color: ORANGE, bold: true, children: "5" }), _jsx(Text, { dimColor: true, children: " period " }), _jsx(Text, { color: ORANGE, bold: true, children: "r" }), _jsx(Text, { dimColor: true, children: " refresh" })] }) }));
|
|
24
|
+
return (_jsx(Box, { borderStyle: "round", borderColor: DIM, width: width, justifyContent: "center", paddingX: 1, children: _jsxs(Text, { children: [_jsx(Text, { color: ORANGE, bold: true, children: '<' }), _jsx(Text, { color: ORANGE, children: '>' }), _jsx(Text, { dimColor: true, children: " switch " }), _jsx(Text, { color: ORANGE, bold: true, children: "q" }), _jsx(Text, { dimColor: true, children: " quit " }), _jsx(Text, { color: ORANGE, bold: true, children: "s" }), _jsxs(Text, { dimColor: true, children: [" ", insightsFocused ? 'back' : 'suggestions', " "] }), _jsx(Text, { color: ORANGE, bold: true, children: "1" }), _jsx(Text, { dimColor: true, children: "-" }), _jsx(Text, { color: ORANGE, bold: true, children: "5" }), _jsx(Text, { dimColor: true, children: " period " }), _jsx(Text, { color: ORANGE, bold: true, children: "r" }), _jsx(Text, { dimColor: true, children: " refresh " }), _jsx(Text, { color: ORANGE, bold: true, children: "n" }), _jsx(Text, { dimColor: true, children: " new session" })] }) }));
|
|
25
25
|
}
|
|
26
26
|
function Row({ wide, width, children }) {
|
|
27
27
|
if (wide)
|
|
@@ -87,6 +87,12 @@ function InteractiveDashboard({ initialLocal, initialApi, initialInstructions, i
|
|
|
87
87
|
reload();
|
|
88
88
|
return;
|
|
89
89
|
}
|
|
90
|
+
if (input === 'n') {
|
|
91
|
+
import('@rulemetric/session').then(({ getLauncher }) => {
|
|
92
|
+
getLauncher('claude_code').launch({ projectPath: process.cwd(), mode: 'interactive' });
|
|
93
|
+
});
|
|
94
|
+
return;
|
|
95
|
+
}
|
|
90
96
|
const idx = PERIODS.indexOf(period);
|
|
91
97
|
if (key.leftArrow)
|
|
92
98
|
switchPeriod(PERIODS[(idx - 1 + PERIODS.length) % PERIODS.length]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Dashboard.js","sourceRoot":"","sources":["../../src/dashboard/Dashboard.tsx"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"Dashboard.js","sourceRoot":"","sources":["../../src/dashboard/Dashboard.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
export declare function maybeRefreshActiveOrg(): Promise<void>;
|
|
2
|
+
/**
|
|
3
|
+
* Explicit, guard-bypassing version of the refresh. Use ONLY from commands
|
|
4
|
+
* where the user just took an action that changes auth/install state and we
|
|
5
|
+
* want the cache to reflect it before the command exits:
|
|
6
|
+
*
|
|
7
|
+
* - After `auth login`: BaseCommand.init fired the guarded refresh BEFORE
|
|
8
|
+
* credentials existed and got a 401; we need to retry post-login.
|
|
9
|
+
* - After `hooks install` / `service install`: belt-and-suspenders so the
|
|
10
|
+
* first Claude Code session after install has a populated cache, even
|
|
11
|
+
* if BaseCommand's earlier refresh hit a transient error.
|
|
12
|
+
*
|
|
13
|
+
* Marks `attempted = true` after running so a redundant `maybeRefreshActiveOrg`
|
|
14
|
+
* call later in the same process is a no-op.
|
|
15
|
+
*/
|
|
16
|
+
export declare function bootstrapActiveOrg(): Promise<void>;
|
|
17
|
+
/**
|
|
18
|
+
* Test hook — reset the once-per-process guard so each test can exercise
|
|
19
|
+
* the refresh logic.
|
|
20
|
+
*/
|
|
21
|
+
export declare function _resetRefreshAttempt(): void;
|
|
22
|
+
//# sourceMappingURL=active-org-refresh.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"active-org-refresh.d.ts","sourceRoot":"","sources":["../../src/lib/active-org-refresh.ts"],"names":[],"mappings":"AAoGA,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,IAAI,CAAC,CAI3D;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,IAAI,CAAC,CAGxD;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,IAAI,IAAI,CAE3C"}
|