iranti 0.3.39 → 0.3.41
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/scripts/iranti-cli.js +133 -0
- package/dist/scripts/iranti-mcp.js +201 -4
- package/dist/src/api/server.js +1 -1
- package/dist/src/lib/cliHelpCatalog.d.ts.map +1 -1
- package/dist/src/lib/cliHelpCatalog.js +12 -0
- package/dist/src/lib/cliHelpCatalog.js.map +1 -1
- package/dist/src/lib/cliHelpRenderer.d.ts +2 -0
- package/dist/src/lib/cliHelpRenderer.d.ts.map +1 -1
- package/dist/src/lib/cliHelpRenderer.js +8 -0
- package/dist/src/lib/cliHelpRenderer.js.map +1 -1
- package/dist/src/lib/feedbackCollector.d.ts +68 -0
- package/dist/src/lib/feedbackCollector.d.ts.map +1 -0
- package/dist/src/lib/feedbackCollector.js +378 -0
- package/dist/src/lib/feedbackCollector.js.map +1 -0
- package/package.json +1 -1
|
@@ -55,6 +55,7 @@ const semanticFactTags_1 = require("../src/lib/semanticFactTags");
|
|
|
55
55
|
const staffEventRegistry_1 = require("../src/lib/staffEventRegistry");
|
|
56
56
|
const scaffoldCloseout_1 = require("../src/lib/scaffoldCloseout");
|
|
57
57
|
const projectLearning_1 = require("../src/lib/projectLearning");
|
|
58
|
+
const feedbackCollector_1 = require("../src/lib/feedbackCollector");
|
|
58
59
|
class CliError extends Error {
|
|
59
60
|
constructor(code, message, hints = [], details) {
|
|
60
61
|
super(message);
|
|
@@ -8587,6 +8588,12 @@ function printResolveHelp() {
|
|
|
8587
8588
|
function printProviderKeyHelp() {
|
|
8588
8589
|
(0, cliHelpRenderer_1.printProviderKeyHelp)({ sectionTitle, commandText });
|
|
8589
8590
|
}
|
|
8591
|
+
function printFeedbackHelp() {
|
|
8592
|
+
(0, cliHelpRenderer_1.printFeedbackHelp)({ sectionTitle, commandText });
|
|
8593
|
+
}
|
|
8594
|
+
function printUiHelp() {
|
|
8595
|
+
(0, cliHelpRenderer_1.printUiHelp)({ sectionTitle, commandText });
|
|
8596
|
+
}
|
|
8590
8597
|
function printMcpHelp() {
|
|
8591
8598
|
console.log([
|
|
8592
8599
|
'MCP server and maintenance commands.',
|
|
@@ -9005,6 +9012,88 @@ async function deleteRuleCommand(args) {
|
|
|
9005
9012
|
await (0, client_1.disconnectDb)().catch(() => undefined);
|
|
9006
9013
|
}
|
|
9007
9014
|
}
|
|
9015
|
+
// ── UI (control plane launcher) ──────────────────────────────────────────────
|
|
9016
|
+
function openBrowserUrl(url) {
|
|
9017
|
+
try {
|
|
9018
|
+
let cmd;
|
|
9019
|
+
let cmdArgs;
|
|
9020
|
+
if (process.platform === 'win32') {
|
|
9021
|
+
cmd = 'cmd';
|
|
9022
|
+
cmdArgs = ['/c', 'start', '', url];
|
|
9023
|
+
}
|
|
9024
|
+
else if (process.platform === 'darwin') {
|
|
9025
|
+
cmd = 'open';
|
|
9026
|
+
cmdArgs = [url];
|
|
9027
|
+
}
|
|
9028
|
+
else {
|
|
9029
|
+
cmd = 'xdg-open';
|
|
9030
|
+
cmdArgs = [url];
|
|
9031
|
+
}
|
|
9032
|
+
(0, child_process_1.spawn)(cmd, cmdArgs, { stdio: 'ignore', detached: true }).unref();
|
|
9033
|
+
}
|
|
9034
|
+
catch {
|
|
9035
|
+
// Browser open is best-effort; non-fatal
|
|
9036
|
+
}
|
|
9037
|
+
}
|
|
9038
|
+
async function uiCommand(args) {
|
|
9039
|
+
// Resolve DATABASE_URL from project binding or instance env
|
|
9040
|
+
const instanceName = getFlag(args, 'instance');
|
|
9041
|
+
if (instanceName) {
|
|
9042
|
+
const scope = normalizeScope(getFlag(args, 'scope'));
|
|
9043
|
+
const root = resolveInstallRoot(args, scope);
|
|
9044
|
+
const loaded = await loadInstanceEnv(root, instanceName);
|
|
9045
|
+
applyEnvMap(loaded.env);
|
|
9046
|
+
}
|
|
9047
|
+
else {
|
|
9048
|
+
const cwd = path_1.default.resolve(process.cwd());
|
|
9049
|
+
const explicitProjectEnv = getFlag(args, 'project-env');
|
|
9050
|
+
(0, runtimeEnv_1.loadRuntimeEnv)({
|
|
9051
|
+
cwd,
|
|
9052
|
+
projectEnvFile: explicitProjectEnv ? path_1.default.resolve(explicitProjectEnv) : undefined,
|
|
9053
|
+
});
|
|
9054
|
+
}
|
|
9055
|
+
const databaseUrl = process.env.DATABASE_URL?.trim();
|
|
9056
|
+
if (!databaseUrl) {
|
|
9057
|
+
throw cliError('IRANTI_DATABASE_URL_MISSING', 'DATABASE_URL is required. Run from a bound project, pass --instance <name>, or set DATABASE_URL.', ['Run `iranti project init . --instance <name>` to bind this project.']);
|
|
9058
|
+
}
|
|
9059
|
+
const noOpen = hasFlag(args, 'no-open');
|
|
9060
|
+
const port = getFlag(args, 'port') ?? '7500';
|
|
9061
|
+
const url = `http://localhost:${port}`;
|
|
9062
|
+
// npx handles both cases: uses the global install if available, downloads otherwise
|
|
9063
|
+
const npxExe = process.platform === 'win32' ? 'npx.cmd' : 'npx';
|
|
9064
|
+
console.log(`${infoLabel()} Starting Iranti control plane at ${url} …`);
|
|
9065
|
+
if (!noOpen) {
|
|
9066
|
+
// Give the server a moment to bind before opening the browser
|
|
9067
|
+
setTimeout(() => { openBrowserUrl(url); }, 2500);
|
|
9068
|
+
}
|
|
9069
|
+
await new Promise((resolve, reject) => {
|
|
9070
|
+
const child = (0, child_process_1.spawn)(npxExe, ['--yes', 'iranti-control-plane'], {
|
|
9071
|
+
stdio: 'inherit',
|
|
9072
|
+
env: {
|
|
9073
|
+
...process.env,
|
|
9074
|
+
DATABASE_URL: databaseUrl,
|
|
9075
|
+
PORT: port,
|
|
9076
|
+
},
|
|
9077
|
+
});
|
|
9078
|
+
const onSigint = () => { child.kill('SIGINT'); };
|
|
9079
|
+
process.once('SIGINT', onSigint);
|
|
9080
|
+
child.on('error', (err) => {
|
|
9081
|
+
process.off('SIGINT', onSigint);
|
|
9082
|
+
reject(cliError('IRANTI_CP_SPAWN_FAILED', `Failed to start iranti-control-plane: ${err.message}`, ['Ensure npx is available on PATH (it comes with npm).']));
|
|
9083
|
+
});
|
|
9084
|
+
child.on('exit', (code, signal) => {
|
|
9085
|
+
process.off('SIGINT', onSigint);
|
|
9086
|
+
if (signal === 'SIGINT' || signal === 'SIGTERM') {
|
|
9087
|
+
resolve();
|
|
9088
|
+
return;
|
|
9089
|
+
}
|
|
9090
|
+
if ((code ?? 0) !== 0) {
|
|
9091
|
+
process.exit(code ?? 1);
|
|
9092
|
+
}
|
|
9093
|
+
resolve();
|
|
9094
|
+
});
|
|
9095
|
+
});
|
|
9096
|
+
}
|
|
9008
9097
|
// ── Export / Import / Snapshot commands ─────────────────────────────────────
|
|
9009
9098
|
/** Marker file written at the end of every successful export (enables --since last). */
|
|
9010
9099
|
const EXPORT_MARKER_FILE = '.iranti-export-marker';
|
|
@@ -9628,6 +9717,34 @@ async function revertAutowriteCommand(args) {
|
|
|
9628
9717
|
await (0, client_1.disconnectDb)().catch(() => undefined);
|
|
9629
9718
|
}
|
|
9630
9719
|
}
|
|
9720
|
+
/**
|
|
9721
|
+
* `iranti feedback` — collect a one-keypress satisfaction signal.
|
|
9722
|
+
*
|
|
9723
|
+
* No DB required. Reads .iranti/session-stats.json for passive usage context,
|
|
9724
|
+
* maintains a throttle record in .iranti/feedback-sent.json, and falls back
|
|
9725
|
+
* to .iranti/pending-feedback.json when the endpoint is unreachable.
|
|
9726
|
+
*/
|
|
9727
|
+
async function feedbackCommand(args) {
|
|
9728
|
+
const ratingStr = getFlag(args, 'rating');
|
|
9729
|
+
const rating = ratingStr !== undefined ? Number(ratingStr) : undefined;
|
|
9730
|
+
const comment = getFlag(args, 'comment');
|
|
9731
|
+
const typeStr = getFlag(args, 'type') ?? 'general';
|
|
9732
|
+
const dryRun = hasFlag(args, 'dry-run');
|
|
9733
|
+
const offline = hasFlag(args, 'offline');
|
|
9734
|
+
const milestoneContext = getFlag(args, 'milestone') ?? null;
|
|
9735
|
+
const type = typeStr;
|
|
9736
|
+
const opts = {
|
|
9737
|
+
rating,
|
|
9738
|
+
comment: comment ?? undefined,
|
|
9739
|
+
type,
|
|
9740
|
+
dryRun,
|
|
9741
|
+
offline,
|
|
9742
|
+
milestoneContext,
|
|
9743
|
+
factCount: null,
|
|
9744
|
+
version: getPackageVersion(),
|
|
9745
|
+
};
|
|
9746
|
+
await (0, feedbackCollector_1.runFeedbackCommand)(opts);
|
|
9747
|
+
}
|
|
9631
9748
|
async function main() {
|
|
9632
9749
|
const args = parseArgs(process.argv.slice(2));
|
|
9633
9750
|
ACTIVE_PARSED_ARGS = args;
|
|
@@ -9962,6 +10079,14 @@ async function main() {
|
|
|
9962
10079
|
await revertAutowriteCommand(args);
|
|
9963
10080
|
return;
|
|
9964
10081
|
}
|
|
10082
|
+
if (args.command === 'feedback' || args.command === 'fb') {
|
|
10083
|
+
if (hasFlag(args, 'help')) {
|
|
10084
|
+
printFeedbackHelp();
|
|
10085
|
+
return;
|
|
10086
|
+
}
|
|
10087
|
+
await feedbackCommand(args);
|
|
10088
|
+
return;
|
|
10089
|
+
}
|
|
9965
10090
|
if (args.command === 'claude-setup') {
|
|
9966
10091
|
await claudeSetupCommand(args);
|
|
9967
10092
|
return;
|
|
@@ -10107,6 +10232,14 @@ async function main() {
|
|
|
10107
10232
|
}
|
|
10108
10233
|
throw new Error(`Unknown integrate target '${args.subcommand ?? ''}'. Use 'claude', 'codex', or 'copilot'.`);
|
|
10109
10234
|
}
|
|
10235
|
+
if (args.command === 'ui') {
|
|
10236
|
+
if (hasFlag(args, 'help')) {
|
|
10237
|
+
printUiHelp();
|
|
10238
|
+
return;
|
|
10239
|
+
}
|
|
10240
|
+
await uiCommand(args);
|
|
10241
|
+
return;
|
|
10242
|
+
}
|
|
10110
10243
|
throw cliError('IRANTI_UNKNOWN_COMMAND', `Unknown command '${args.command}'. Run: iranti help`, ['Use `iranti help` to see the current command surface.'], { command: args.command });
|
|
10111
10244
|
}
|
|
10112
10245
|
main().then(async () => {
|
|
@@ -47,6 +47,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
47
47
|
* IRANTI_PROJECT_ENV, IRANTI_INSTANCE_ENV, IRANTI_MCP_AGENT_NAME.
|
|
48
48
|
*/
|
|
49
49
|
const node_fs_1 = __importDefault(require("node:fs"));
|
|
50
|
+
const promises_1 = __importDefault(require("node:fs/promises"));
|
|
50
51
|
const node_path_1 = __importDefault(require("node:path"));
|
|
51
52
|
const mcp_js_1 = require("@modelcontextprotocol/sdk/server/mcp.js");
|
|
52
53
|
const stdio_js_1 = require("@modelcontextprotocol/sdk/server/stdio.js");
|
|
@@ -92,6 +93,11 @@ let _activeWatcher = null;
|
|
|
92
93
|
let _watchedCwd = null;
|
|
93
94
|
let _watchDebounceTimer = null;
|
|
94
95
|
const _watchPendingChanges = new Set();
|
|
96
|
+
// ── Feedback friction detector (Phase 5) ─────────────────────────────────────
|
|
97
|
+
// Counts how many times the write-debt gate has blocked attend this session.
|
|
98
|
+
// After 3 blocks, the next successful attend includes a frictionNudge field.
|
|
99
|
+
let _writeDebtFireCount = 0;
|
|
100
|
+
let _frictionNudgeSentThisSession = false;
|
|
95
101
|
// ─────────────────────────────────────────────────────────────────────────────
|
|
96
102
|
async function dbStartup() {
|
|
97
103
|
if (_dbStartupDone)
|
|
@@ -500,6 +506,170 @@ function protocolViolationResult(error) {
|
|
|
500
506
|
},
|
|
501
507
|
};
|
|
502
508
|
}
|
|
509
|
+
function resolveIrantiDirForCwd(cwd) {
|
|
510
|
+
const local = node_path_1.default.join(cwd, '.iranti');
|
|
511
|
+
if (node_fs_1.default.existsSync(local))
|
|
512
|
+
return local;
|
|
513
|
+
const home = process.env.HOME ?? process.env.USERPROFILE ?? '';
|
|
514
|
+
return node_path_1.default.join(home, '.iranti');
|
|
515
|
+
}
|
|
516
|
+
async function readSessionStatsFile(irantiDir) {
|
|
517
|
+
try {
|
|
518
|
+
const raw = await promises_1.default.readFile(node_path_1.default.join(irantiDir, 'session-stats.json'), 'utf8');
|
|
519
|
+
return JSON.parse(raw);
|
|
520
|
+
}
|
|
521
|
+
catch {
|
|
522
|
+
return null;
|
|
523
|
+
}
|
|
524
|
+
}
|
|
525
|
+
async function updateSessionStats(cwd, host) {
|
|
526
|
+
const irantiDir = resolveIrantiDirForCwd(cwd);
|
|
527
|
+
const existing = (await readSessionStatsFile(irantiDir)) ?? {};
|
|
528
|
+
const now = new Date().toISOString();
|
|
529
|
+
const uniqueHosts = existing.uniqueHosts ?? [];
|
|
530
|
+
if (host && !uniqueHosts.includes(host)) {
|
|
531
|
+
uniqueHosts.push(host);
|
|
532
|
+
}
|
|
533
|
+
const updated = {
|
|
534
|
+
totalSessions: (existing.totalSessions ?? 0) + 1,
|
|
535
|
+
totalWrites: existing.totalWrites ?? 0,
|
|
536
|
+
totalAttends: existing.totalAttends ?? 0,
|
|
537
|
+
totalValueDeliveries: existing.totalValueDeliveries ?? 0,
|
|
538
|
+
uniqueHosts,
|
|
539
|
+
firstSessionAt: existing.firstSessionAt ?? now,
|
|
540
|
+
lastSessionAt: now,
|
|
541
|
+
feedbackMilestonesSeen: existing.feedbackMilestonesSeen ?? [],
|
|
542
|
+
};
|
|
543
|
+
try {
|
|
544
|
+
await promises_1.default.mkdir(irantiDir, { recursive: true });
|
|
545
|
+
await promises_1.default.writeFile(node_path_1.default.join(irantiDir, 'session-stats.json'), JSON.stringify(updated, null, 2) + '\n', 'utf8');
|
|
546
|
+
}
|
|
547
|
+
catch {
|
|
548
|
+
// Non-fatal: session stats are best-effort
|
|
549
|
+
}
|
|
550
|
+
return updated;
|
|
551
|
+
}
|
|
552
|
+
const FEEDBACK_MILESTONES = [
|
|
553
|
+
{
|
|
554
|
+
key: 'first_run',
|
|
555
|
+
check: (s) => s.totalSessions === 1,
|
|
556
|
+
message: "You've just used Iranti for the first time. Got 10 seconds to tell us how it went?",
|
|
557
|
+
trigger: 'first_session',
|
|
558
|
+
},
|
|
559
|
+
{
|
|
560
|
+
key: 'sessions_10',
|
|
561
|
+
check: (s) => s.totalSessions >= 10,
|
|
562
|
+
message: "10 sessions in — how's Iranti working for you?",
|
|
563
|
+
trigger: 'sessions_milestone',
|
|
564
|
+
},
|
|
565
|
+
{
|
|
566
|
+
key: 'sessions_25',
|
|
567
|
+
check: (s) => s.totalSessions >= 25,
|
|
568
|
+
message: "25 sessions with Iranti. We'd love your feedback.",
|
|
569
|
+
trigger: 'sessions_milestone',
|
|
570
|
+
},
|
|
571
|
+
{
|
|
572
|
+
key: 'sessions_50',
|
|
573
|
+
check: (s) => s.totalSessions >= 50,
|
|
574
|
+
message: "50 sessions — you're a power user. Tell us what's working (and what isn't).",
|
|
575
|
+
trigger: 'sessions_milestone',
|
|
576
|
+
},
|
|
577
|
+
{
|
|
578
|
+
key: 'cross_host_2',
|
|
579
|
+
check: (s) => s.uniqueHosts.length >= 2,
|
|
580
|
+
message: "You're using Iranti across multiple environments. How's the experience?",
|
|
581
|
+
trigger: 'cross_host',
|
|
582
|
+
},
|
|
583
|
+
{
|
|
584
|
+
key: 'cross_host_3',
|
|
585
|
+
check: (s) => s.uniqueHosts.length >= 3,
|
|
586
|
+
message: "Three different hosts — Iranti is following you around. Feedback welcome.",
|
|
587
|
+
trigger: 'cross_host',
|
|
588
|
+
},
|
|
589
|
+
{
|
|
590
|
+
key: 'facts_25',
|
|
591
|
+
check: (_s, fc) => fc >= 25,
|
|
592
|
+
message: "You've saved 25+ facts with Iranti. Quick rating?",
|
|
593
|
+
trigger: 'facts_milestone',
|
|
594
|
+
},
|
|
595
|
+
{
|
|
596
|
+
key: 'facts_50',
|
|
597
|
+
check: (_s, fc) => fc >= 50,
|
|
598
|
+
message: "50 facts saved — Iranti is working for you. Would love your thoughts.",
|
|
599
|
+
trigger: 'facts_milestone',
|
|
600
|
+
},
|
|
601
|
+
{
|
|
602
|
+
key: 'facts_100',
|
|
603
|
+
check: (_s, fc) => fc >= 100,
|
|
604
|
+
message: "100 facts in memory. How's it going?",
|
|
605
|
+
trigger: 'facts_milestone',
|
|
606
|
+
},
|
|
607
|
+
{
|
|
608
|
+
key: 'facts_250',
|
|
609
|
+
check: (_s, fc) => fc >= 250,
|
|
610
|
+
message: "250 facts saved. Iranti is earning its keep — got a minute to share?",
|
|
611
|
+
trigger: 'facts_milestone',
|
|
612
|
+
},
|
|
613
|
+
{
|
|
614
|
+
key: 'facts_500',
|
|
615
|
+
check: (_s, fc) => fc >= 500,
|
|
616
|
+
message: "500 facts! That's a lot of context saved. How does Iranti feel after all this use?",
|
|
617
|
+
trigger: 'facts_milestone',
|
|
618
|
+
},
|
|
619
|
+
];
|
|
620
|
+
async function computeFeedbackNudge(cwd, factCount) {
|
|
621
|
+
try {
|
|
622
|
+
const irantiDir = resolveIrantiDirForCwd(cwd);
|
|
623
|
+
const stats = await readSessionStatsFile(irantiDir);
|
|
624
|
+
if (!stats)
|
|
625
|
+
return null;
|
|
626
|
+
// Suppress if feedback was sent within the last 30 days
|
|
627
|
+
try {
|
|
628
|
+
const throttleFile = node_path_1.default.join(irantiDir, 'feedback-sent.json');
|
|
629
|
+
if (node_fs_1.default.existsSync(throttleFile)) {
|
|
630
|
+
const throttle = JSON.parse(node_fs_1.default.readFileSync(throttleFile, 'utf8'));
|
|
631
|
+
if (throttle.lastSentAt) {
|
|
632
|
+
const daysSince = (Date.now() - new Date(throttle.lastSentAt).getTime()) / 86400000;
|
|
633
|
+
if (daysSince < 30)
|
|
634
|
+
return null;
|
|
635
|
+
}
|
|
636
|
+
}
|
|
637
|
+
}
|
|
638
|
+
catch {
|
|
639
|
+
// Non-fatal: proceed without suppression check
|
|
640
|
+
}
|
|
641
|
+
const seen = new Set(stats.feedbackMilestonesSeen ?? []);
|
|
642
|
+
for (const milestone of FEEDBACK_MILESTONES) {
|
|
643
|
+
if (seen.has(milestone.key))
|
|
644
|
+
continue;
|
|
645
|
+
if (!milestone.check(stats, factCount))
|
|
646
|
+
continue;
|
|
647
|
+
// Mark as seen immediately so it never fires twice
|
|
648
|
+
const updatedStats = {
|
|
649
|
+
...stats,
|
|
650
|
+
feedbackMilestonesSeen: [...seen, milestone.key],
|
|
651
|
+
};
|
|
652
|
+
try {
|
|
653
|
+
await promises_1.default.writeFile(node_path_1.default.join(irantiDir, 'session-stats.json'), JSON.stringify(updatedStats, null, 2) + '\n', 'utf8');
|
|
654
|
+
}
|
|
655
|
+
catch {
|
|
656
|
+
// Non-fatal
|
|
657
|
+
}
|
|
658
|
+
return {
|
|
659
|
+
command: 'iranti feedback',
|
|
660
|
+
message: milestone.message,
|
|
661
|
+
trigger: milestone.trigger,
|
|
662
|
+
milestone: milestone.key,
|
|
663
|
+
suppressUntil: new Date(Date.now() + 30 * 86400000).toISOString(),
|
|
664
|
+
};
|
|
665
|
+
}
|
|
666
|
+
return null;
|
|
667
|
+
}
|
|
668
|
+
catch {
|
|
669
|
+
return null; // Never fail handshake due to nudge logic
|
|
670
|
+
}
|
|
671
|
+
}
|
|
672
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
503
673
|
function normalizeRecentMessages(messages) {
|
|
504
674
|
if (!Array.isArray(messages))
|
|
505
675
|
return [];
|
|
@@ -631,7 +801,7 @@ async function main() {
|
|
|
631
801
|
// DB startup is deferred to first tool call via dbStartup() — see above.
|
|
632
802
|
const server = new mcp_js_1.McpServer({
|
|
633
803
|
name: 'iranti-mcp',
|
|
634
|
-
version: '0.3.
|
|
804
|
+
version: '0.3.41',
|
|
635
805
|
});
|
|
636
806
|
server.registerTool('iranti_handshake', {
|
|
637
807
|
description: `Initialize or refresh an agent's working-memory brief for the current task.
|
|
@@ -669,10 +839,22 @@ Do not use this as a per-turn retrieval tool; use iranti_attend.`,
|
|
|
669
839
|
if (resolvedHost !== 'claude_code') {
|
|
670
840
|
startFileWatcher(process.cwd());
|
|
671
841
|
}
|
|
842
|
+
// Phase 3: increment session stats and compute milestone nudge.
|
|
843
|
+
await updateSessionStats(process.cwd(), resolvedHost ?? '');
|
|
844
|
+
let factCount = 0;
|
|
845
|
+
try {
|
|
846
|
+
factCount = await (0, client_1.getDb)().knowledgeEntry.count({
|
|
847
|
+
where: { NOT: [{ entityType: 'system' }, { entityType: 'agent' }] },
|
|
848
|
+
});
|
|
849
|
+
}
|
|
850
|
+
catch {
|
|
851
|
+
// Non-fatal: factCount milestones degrade gracefully to 0
|
|
852
|
+
}
|
|
853
|
+
const feedbackNudge = await computeFeedbackNudge(process.cwd(), factCount);
|
|
672
854
|
if (setupWarnings.length > 0) {
|
|
673
|
-
return textResult({ ...result, setupWarnings });
|
|
855
|
+
return textResult({ ...result, ...(feedbackNudge ? { feedbackNudge } : {}), setupWarnings });
|
|
674
856
|
}
|
|
675
|
-
return textResult(result);
|
|
857
|
+
return textResult(feedbackNudge ? { ...result, feedbackNudge } : result);
|
|
676
858
|
});
|
|
677
859
|
server.registerTool('iranti_attend', {
|
|
678
860
|
description: `Ask Iranti whether memory should be injected before the next LLM turn.
|
|
@@ -728,8 +910,10 @@ checkpoint state before closing the turn.`,
|
|
|
728
910
|
// write-debt comes from its PostToolUse hook; other hosts use the watcher.
|
|
729
911
|
if (!phase || phase === 'pre-response' || phase === 'mid-turn') {
|
|
730
912
|
const debtBlock = checkWriteDebtForAttend(process.cwd());
|
|
731
|
-
if (debtBlock)
|
|
913
|
+
if (debtBlock) {
|
|
914
|
+
_writeDebtFireCount++;
|
|
732
915
|
return debtBlock;
|
|
916
|
+
}
|
|
733
917
|
}
|
|
734
918
|
// ─────────────────────────────────────────────────────────────────────
|
|
735
919
|
const resolvedLatestMessage = resolveAttendLatestMessage({ latestMessage, message });
|
|
@@ -797,11 +981,24 @@ checkpoint state before closing the turn.`,
|
|
|
797
981
|
const injectionBlock = factsBlock || rulesBlock
|
|
798
982
|
? `${factsBlock}${rulesBlock}`
|
|
799
983
|
: '';
|
|
984
|
+
// Phase 5: friction nudge after 3+ write-debt gate fires this session.
|
|
985
|
+
let frictionNudge = null;
|
|
986
|
+
if (!_frictionNudgeSentThisSession && _writeDebtFireCount >= 3) {
|
|
987
|
+
_frictionNudgeSentThisSession = true;
|
|
988
|
+
frictionNudge = {
|
|
989
|
+
command: 'iranti feedback',
|
|
990
|
+
message: "You've hit the write-debt gate a few times this session. Something feeling off? Would love to hear it.",
|
|
991
|
+
trigger: 'friction',
|
|
992
|
+
milestone: 'friction_write_debt',
|
|
993
|
+
suppressUntil: new Date(Date.now() + 7 * 86400000).toISOString(),
|
|
994
|
+
};
|
|
995
|
+
}
|
|
800
996
|
return textResult({
|
|
801
997
|
...result,
|
|
802
998
|
facts: sanitizeFacts(result.facts),
|
|
803
999
|
injectionBlock,
|
|
804
1000
|
...(postResponseCapture ? { postResponseCapture } : {}),
|
|
1001
|
+
...(frictionNudge ? { frictionNudge } : {}),
|
|
805
1002
|
});
|
|
806
1003
|
}
|
|
807
1004
|
catch (error) {
|
package/dist/src/api/server.js
CHANGED
|
@@ -71,7 +71,7 @@ const RUNTIME_AUTHORITY = (0, runtimeLifecycle_1.resolveRuntimeAuthorityFromEnv)
|
|
|
71
71
|
const INSTANCE_DIR = RUNTIME_AUTHORITY.instanceDir;
|
|
72
72
|
const INSTANCE_RUNTIME_FILE = RUNTIME_AUTHORITY.runtimeFile;
|
|
73
73
|
const INSTANCE_NAME = process.env.IRANTI_INSTANCE_NAME?.trim() || (INSTANCE_DIR ? path_1.default.basename(INSTANCE_DIR) : 'adhoc');
|
|
74
|
-
const VERSION = '0.3.
|
|
74
|
+
const VERSION = '0.3.41';
|
|
75
75
|
const PORT_RAW = (process.env.IRANTI_PORT ?? '3001').trim();
|
|
76
76
|
const PORT = Number.parseInt(PORT_RAW, 10);
|
|
77
77
|
const runtimeMetadataHealth = (0, healthChecks_1.createHealthCheckState)({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cliHelpCatalog.d.ts","sourceRoot":"","sources":["../../../src/lib/cliHelpCatalog.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,MAAM,MAAM,SAAS,GAAG;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,SAAS,EAyBtC,CAAC;AAEF,eAAO,MAAM,sBAAsB,EAAE,SAAS,EA2C7C,CAAC;AAEF,eAAO,MAAM,kBAAkB,EAAE,SAAS,EAyBzC,CAAC;AAEF,eAAO,MAAM,QAAQ,EAAE,SAAS,EA2C/B,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,SAAS,
|
|
1
|
+
{"version":3,"file":"cliHelpCatalog.d.ts","sourceRoot":"","sources":["../../../src/lib/cliHelpCatalog.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,MAAM,MAAM,SAAS,GAAG;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,SAAS,EAyBtC,CAAC;AAEF,eAAO,MAAM,sBAAsB,EAAE,SAAS,EA2C7C,CAAC;AAEF,eAAO,MAAM,kBAAkB,EAAE,SAAS,EAyBzC,CAAC;AAEF,eAAO,MAAM,QAAQ,EAAE,SAAS,EA2C/B,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,SAAS,EAuGvC,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,SAAS,EAOnC,CAAC;AAEF,eAAO,MAAM,iBAAiB,EAAE,SAAS,EAmExC,CAAC;AAEF,eAAO,MAAM,kBAAkB,EAAE,SAAS,EAOzC,CAAC;AAEF,eAAO,MAAM,kBAAkB,EAAE,gBAAgB,EAkBhD,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,SAAS,EAOrC,CAAC;AAEF,eAAO,MAAM,sBAAsB,EAAE,gBAAgB,EAMpD,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,SAAS,EAyBpC,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,SAAS,EAarC,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,SAAS,EAmBhC,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,SAAS,EAyBrC,CAAC;AAEF,eAAO,MAAM,iBAAiB,EAAE,SAAS,EAyBxC,CAAC;AAEF,eAAO,MAAM,YAAY;;;;CAcxB,CAAC"}
|
|
@@ -248,6 +248,18 @@ exports.DIAGNOSTICS_HELP = [
|
|
|
248
248
|
useWhen: 'an attend() call extracted bad or low-quality facts from a tool result and you need to roll them back cleanly.',
|
|
249
249
|
scenario: 'After a noisy Read/Grep autowrite batch, run with --since 15m to preview, then add --commit to delete.',
|
|
250
250
|
},
|
|
251
|
+
{
|
|
252
|
+
command: 'iranti feedback [--rating <1-5>] [--comment <text>] [--type bug|praise|suggestion|general] [--dry-run] [--offline]',
|
|
253
|
+
description: 'Send a one-keypress satisfaction signal to the Iranti team.',
|
|
254
|
+
useWhen: 'something feels off, you want to share praise, or you have a suggestion — and you have ten seconds.',
|
|
255
|
+
scenario: 'Running `iranti feedback --type bug` immediately after hitting a frustrating edge case.',
|
|
256
|
+
},
|
|
257
|
+
{
|
|
258
|
+
command: 'iranti ui [--instance <name>] [--project-env <file>] [--port <n>] [--no-open]',
|
|
259
|
+
description: 'Launch the Iranti control plane web UI and open it in your browser.',
|
|
260
|
+
useWhen: 'you want to browse agent memory, inspect facts by entity, check system health, or resolve write conflicts from a visual interface.',
|
|
261
|
+
scenario: 'Run from a bound project after setup to open the Memory Explorer at localhost:7500.',
|
|
262
|
+
},
|
|
251
263
|
];
|
|
252
264
|
exports.CONNECT_HELP = [
|
|
253
265
|
{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cliHelpCatalog.js","sourceRoot":"","sources":["../../../src/lib/cliHelpCatalog.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cliHelpCatalog.js","sourceRoot":"","sources":["../../../src/lib/cliHelpCatalog.ts"],"names":[],"mappings":"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"}
|
|
@@ -56,5 +56,7 @@ export declare function printHandoffHelp(style: CliHelpStyle): void;
|
|
|
56
56
|
export declare function printChatHelp(style: CliHelpStyle): void;
|
|
57
57
|
export declare function printResolveHelp(style: CliHelpStyle): void;
|
|
58
58
|
export declare function printProviderKeyHelp(style: CliHelpStyle): void;
|
|
59
|
+
export declare function printFeedbackHelp(style: CliHelpStyle): void;
|
|
60
|
+
export declare function printUiHelp(style: CliHelpStyle): void;
|
|
59
61
|
export { printChoiceGuide };
|
|
60
62
|
//# sourceMappingURL=cliHelpRenderer.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cliHelpRenderer.d.ts","sourceRoot":"","sources":["../../../src/lib/cliHelpRenderer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAwBH,KAAK,gBAAgB,GAAG;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACvB,YAAY,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;IACvC,WAAW,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;CACzC,CAAC;AAuCF,iBAAS,gBAAgB,CAAC,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,gBAAgB,EAAE,GAAG,IAAI,CAQ/F;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAM1F;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI,CAkCvD;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI,CAGxD;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI,CAM1D;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI,CAMtD;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI,CAG5D;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI,CAE3D;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI,CAE5D;AAED,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI,CAMpE;AAED,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI,CAMnE;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI,CAEvD;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI,CAMhE;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI,CAM/D;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI,CAMhE;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI,CAE5D;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI,CAE1D;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI,CAM9D;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI,CAMhE;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI,CAOzD;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI,CAOzD;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI,CAM1D;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI,CAM5D;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI,CAMzD;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI,CAMzD;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI,CAM1D;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI,CAMvD;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI,CAM1D;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI,CAI9D;AAED,OAAO,EAAE,gBAAgB,EAAE,CAAC"}
|
|
1
|
+
{"version":3,"file":"cliHelpRenderer.d.ts","sourceRoot":"","sources":["../../../src/lib/cliHelpRenderer.ts"],"names":[],"mappings":"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"}
|
|
@@ -48,6 +48,8 @@ exports.printHandoffHelp = printHandoffHelp;
|
|
|
48
48
|
exports.printChatHelp = printChatHelp;
|
|
49
49
|
exports.printResolveHelp = printResolveHelp;
|
|
50
50
|
exports.printProviderKeyHelp = printProviderKeyHelp;
|
|
51
|
+
exports.printFeedbackHelp = printFeedbackHelp;
|
|
52
|
+
exports.printUiHelp = printUiHelp;
|
|
51
53
|
exports.printChoiceGuide = printChoiceGuide;
|
|
52
54
|
const cliHelpCatalog_1 = require("./cliHelpCatalog");
|
|
53
55
|
function printHelpEntries(style, title, entries) {
|
|
@@ -215,4 +217,10 @@ function printProviderKeyHelp(style) {
|
|
|
215
217
|
console.log(' Target either an instance env or a project binding. If neither is supplied, the CLI will try the current project first.');
|
|
216
218
|
console.log(' Use instance targeting for shared runtime configuration. Use project targeting when the command should follow a specific `.env.iranti` binding.');
|
|
217
219
|
}
|
|
220
|
+
function printFeedbackHelp(style) {
|
|
221
|
+
printSingleHelpEntry(style, 'Feedback Command', requireHelpEntry(cliHelpCatalog_1.DIAGNOSTICS_HELP, 'iranti feedback '));
|
|
222
|
+
}
|
|
223
|
+
function printUiHelp(style) {
|
|
224
|
+
printSingleHelpEntry(style, 'UI Command', requireHelpEntry(cliHelpCatalog_1.DIAGNOSTICS_HELP, 'iranti ui '));
|
|
225
|
+
}
|
|
218
226
|
//# sourceMappingURL=cliHelpRenderer.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cliHelpRenderer.js","sourceRoot":"","sources":["../../../src/lib/cliHelpRenderer.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;GAmBG;;AAkFH,4CAMC;AAED,sCAkCC;AAED,wCAGC;AAED,4CAMC;AAED,oCAMC;AAED,gDAGC;AAED,8CAEC;AAED,gDAEC;AAED,gEAMC;AAED,8DAMC;AAED,sCAEC;AAED,wDAMC;AAED,sDAMC;AAED,wDAMC;AAED,gDAEC;AAED,4CAEC;AAED,oDAMC;AAED,wDAMC;AAED,0CAOC;AAED,0CAOC;AAED,4CAMC;AAED,gDAMC;AAED,0CAMC;AAED,0CAMC;AAED,4CAMC;AAED,sCAMC;AAED,4CAMC;AAED,oDAIC;AAEQ,4CAAgB;
|
|
1
|
+
{"version":3,"file":"cliHelpRenderer.js","sourceRoot":"","sources":["../../../src/lib/cliHelpRenderer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Feedback collection module for the iranti CLI.
|
|
3
|
+
*
|
|
4
|
+
* Surfaces satisfaction signals via the `iranti feedback` command:
|
|
5
|
+
* single-keypress rating, optional free-text comment, anonymous persistent
|
|
6
|
+
* UUID, local throttle, and offline fallback queue. No DB required — relies
|
|
7
|
+
* only on .iranti/ local files and the telemetry endpoint.
|
|
8
|
+
*
|
|
9
|
+
* Passive usage signals (session-stats.json) are read here so that Phase 3
|
|
10
|
+
* (milestone nudges in iranti_handshake) has rich data without any active
|
|
11
|
+
* user action. The MCP server writes that file; this module only reads it.
|
|
12
|
+
*
|
|
13
|
+
* Exported types are also used by the MCP nudge system (Phase 3) which reads
|
|
14
|
+
* SessionStats and calls recordMilestoneNudgeSeen() to prevent repeat nudges.
|
|
15
|
+
*/
|
|
16
|
+
export type FeedbackType = 'bug' | 'praise' | 'suggestion' | 'general';
|
|
17
|
+
export type FeedbackPayload = {
|
|
18
|
+
feedbackId: string;
|
|
19
|
+
rating: number;
|
|
20
|
+
comment: string | null;
|
|
21
|
+
type: FeedbackType;
|
|
22
|
+
version: string;
|
|
23
|
+
os: string;
|
|
24
|
+
arch: string;
|
|
25
|
+
nodeVersion: string;
|
|
26
|
+
sessionCount: number | null;
|
|
27
|
+
factCount: number | null;
|
|
28
|
+
instanceId: string;
|
|
29
|
+
milestoneContext: string | null;
|
|
30
|
+
submittedAt: string;
|
|
31
|
+
};
|
|
32
|
+
/** Passive usage stats written by the MCP server at each session. */
|
|
33
|
+
export type SessionStats = {
|
|
34
|
+
totalSessions: number;
|
|
35
|
+
totalWrites: number;
|
|
36
|
+
totalAttends: number;
|
|
37
|
+
totalValueDeliveries: number;
|
|
38
|
+
uniqueHosts: string[];
|
|
39
|
+
firstSessionAt: string;
|
|
40
|
+
lastSessionAt: string;
|
|
41
|
+
feedbackMilestonesSeen: string[];
|
|
42
|
+
};
|
|
43
|
+
export type FeedbackRunOptions = {
|
|
44
|
+
rating?: number;
|
|
45
|
+
comment?: string;
|
|
46
|
+
type?: FeedbackType;
|
|
47
|
+
dryRun?: boolean;
|
|
48
|
+
offline?: boolean;
|
|
49
|
+
milestoneContext?: string | null;
|
|
50
|
+
factCount?: number | null;
|
|
51
|
+
version: string;
|
|
52
|
+
};
|
|
53
|
+
/** Read passive usage stats accumulated by the MCP server. Returns null if absent. */
|
|
54
|
+
export declare function readSessionStats(irantiDir: string): Promise<SessionStats | null>;
|
|
55
|
+
/**
|
|
56
|
+
* Record that a milestone nudge key was shown so it doesn't repeat.
|
|
57
|
+
* Used by the MCP nudge system (Phase 3).
|
|
58
|
+
*/
|
|
59
|
+
export declare function recordMilestoneNudgeSeen(irantiDir: string, milestoneKey: string): Promise<void>;
|
|
60
|
+
/**
|
|
61
|
+
* Run the full feedback collection flow.
|
|
62
|
+
*
|
|
63
|
+
* Respects user's time: throttled by default (7 days), bugs by 1 day.
|
|
64
|
+
* If the endpoint is unreachable, saves to .iranti/pending-feedback.json
|
|
65
|
+
* for silent retry on the next run.
|
|
66
|
+
*/
|
|
67
|
+
export declare function runFeedbackCommand(opts: FeedbackRunOptions): Promise<void>;
|
|
68
|
+
//# sourceMappingURL=feedbackCollector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"feedbackCollector.d.ts","sourceRoot":"","sources":["../../../src/lib/feedbackCollector.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAYH,MAAM,MAAM,YAAY,GAAG,KAAK,GAAG,QAAQ,GAAG,YAAY,GAAG,SAAS,CAAC;AAEvE,MAAM,MAAM,eAAe,GAAG;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,IAAI,EAAE,YAAY,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,WAAW,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,qEAAqE;AACrE,MAAM,MAAM,YAAY,GAAG;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,sBAAsB,EAAE,MAAM,EAAE,CAAC;CACpC,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,YAAY,CAAC;IACpB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,OAAO,EAAE,MAAM,CAAC;CACnB,CAAC;AA2DF,sFAAsF;AACtF,wBAAsB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAOtF;AAED;;;GAGG;AACH,wBAAsB,wBAAwB,CAAC,SAAS,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAmBrG;AAiMD;;;;;;GAMG;AACH,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAoFhF"}
|
|
@@ -0,0 +1,378 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Feedback collection module for the iranti CLI.
|
|
4
|
+
*
|
|
5
|
+
* Surfaces satisfaction signals via the `iranti feedback` command:
|
|
6
|
+
* single-keypress rating, optional free-text comment, anonymous persistent
|
|
7
|
+
* UUID, local throttle, and offline fallback queue. No DB required — relies
|
|
8
|
+
* only on .iranti/ local files and the telemetry endpoint.
|
|
9
|
+
*
|
|
10
|
+
* Passive usage signals (session-stats.json) are read here so that Phase 3
|
|
11
|
+
* (milestone nudges in iranti_handshake) has rich data without any active
|
|
12
|
+
* user action. The MCP server writes that file; this module only reads it.
|
|
13
|
+
*
|
|
14
|
+
* Exported types are also used by the MCP nudge system (Phase 3) which reads
|
|
15
|
+
* SessionStats and calls recordMilestoneNudgeSeen() to prevent repeat nudges.
|
|
16
|
+
*/
|
|
17
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
18
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
19
|
+
};
|
|
20
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
21
|
+
exports.readSessionStats = readSessionStats;
|
|
22
|
+
exports.recordMilestoneNudgeSeen = recordMilestoneNudgeSeen;
|
|
23
|
+
exports.runFeedbackCommand = runFeedbackCommand;
|
|
24
|
+
const fs_1 = __importDefault(require("fs"));
|
|
25
|
+
const promises_1 = __importDefault(require("fs/promises"));
|
|
26
|
+
const https_1 = __importDefault(require("https"));
|
|
27
|
+
const os_1 = __importDefault(require("os"));
|
|
28
|
+
const path_1 = __importDefault(require("path"));
|
|
29
|
+
const readline_1 = __importDefault(require("readline"));
|
|
30
|
+
const crypto_1 = require("crypto");
|
|
31
|
+
// ── Constants ─────────────────────────────────────────────────────────────────
|
|
32
|
+
const ENDPOINT = 'https://api.iranti.dev/feedback';
|
|
33
|
+
const TIMEOUT_MS = 5000;
|
|
34
|
+
const THROTTLE_DAYS = 7;
|
|
35
|
+
const BUG_THROTTLE_DAYS = 1;
|
|
36
|
+
const RATING_LABELS = {
|
|
37
|
+
1: 'Great',
|
|
38
|
+
2: 'OK',
|
|
39
|
+
3: 'Not great',
|
|
40
|
+
4: 'Good',
|
|
41
|
+
5: 'Excellent',
|
|
42
|
+
};
|
|
43
|
+
// ── File path helpers ─────────────────────────────────────────────────────────
|
|
44
|
+
/** Resolve the .iranti/ directory. Prefer cwd/.iranti if it exists. */
|
|
45
|
+
function resolveIrantiDir() {
|
|
46
|
+
const local = path_1.default.join(process.cwd(), '.iranti');
|
|
47
|
+
return fs_1.default.existsSync(local) ? local : path_1.default.join(os_1.default.homedir(), '.iranti');
|
|
48
|
+
}
|
|
49
|
+
async function ensureDir(dir) {
|
|
50
|
+
await promises_1.default.mkdir(dir, { recursive: true });
|
|
51
|
+
}
|
|
52
|
+
// ── Instance ID ───────────────────────────────────────────────────────────────
|
|
53
|
+
/**
|
|
54
|
+
* Return the persistent anonymous instance UUID, creating it if absent.
|
|
55
|
+
* Stored at .iranti/instance-id. Never contains PII.
|
|
56
|
+
*/
|
|
57
|
+
async function getOrCreateInstanceId(irantiDir) {
|
|
58
|
+
const file = path_1.default.join(irantiDir, 'instance-id');
|
|
59
|
+
try {
|
|
60
|
+
return (await promises_1.default.readFile(file, 'utf8')).trim();
|
|
61
|
+
}
|
|
62
|
+
catch {
|
|
63
|
+
const id = (0, crypto_1.randomUUID)();
|
|
64
|
+
await ensureDir(irantiDir);
|
|
65
|
+
await promises_1.default.writeFile(file, id, 'utf8');
|
|
66
|
+
return id;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
// ── Session stats (passive signal) ───────────────────────────────────────────
|
|
70
|
+
/** Read passive usage stats accumulated by the MCP server. Returns null if absent. */
|
|
71
|
+
async function readSessionStats(irantiDir) {
|
|
72
|
+
try {
|
|
73
|
+
const raw = await promises_1.default.readFile(path_1.default.join(irantiDir, 'session-stats.json'), 'utf8');
|
|
74
|
+
return JSON.parse(raw);
|
|
75
|
+
}
|
|
76
|
+
catch {
|
|
77
|
+
return null;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Record that a milestone nudge key was shown so it doesn't repeat.
|
|
82
|
+
* Used by the MCP nudge system (Phase 3).
|
|
83
|
+
*/
|
|
84
|
+
async function recordMilestoneNudgeSeen(irantiDir, milestoneKey) {
|
|
85
|
+
const file = path_1.default.join(irantiDir, 'session-stats.json');
|
|
86
|
+
const stats = (await readSessionStats(irantiDir)) ?? {};
|
|
87
|
+
const seen = stats.feedbackMilestonesSeen ?? [];
|
|
88
|
+
if (!seen.includes(milestoneKey)) {
|
|
89
|
+
seen.push(milestoneKey);
|
|
90
|
+
const updated = {
|
|
91
|
+
totalSessions: stats.totalSessions ?? 0,
|
|
92
|
+
totalWrites: stats.totalWrites ?? 0,
|
|
93
|
+
totalAttends: stats.totalAttends ?? 0,
|
|
94
|
+
totalValueDeliveries: stats.totalValueDeliveries ?? 0,
|
|
95
|
+
uniqueHosts: stats.uniqueHosts ?? [],
|
|
96
|
+
firstSessionAt: stats.firstSessionAt ?? new Date().toISOString(),
|
|
97
|
+
lastSessionAt: stats.lastSessionAt ?? new Date().toISOString(),
|
|
98
|
+
feedbackMilestonesSeen: seen,
|
|
99
|
+
};
|
|
100
|
+
await ensureDir(irantiDir);
|
|
101
|
+
await promises_1.default.writeFile(file, JSON.stringify(updated, null, 2) + '\n', 'utf8');
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
// ── Throttle ──────────────────────────────────────────────────────────────────
|
|
105
|
+
async function isThrottled(irantiDir, type) {
|
|
106
|
+
try {
|
|
107
|
+
const raw = await promises_1.default.readFile(path_1.default.join(irantiDir, 'feedback-sent.json'), 'utf8');
|
|
108
|
+
const record = JSON.parse(raw);
|
|
109
|
+
const lastSent = new Date(record.lastSentAt).getTime();
|
|
110
|
+
const cooldownDays = type === 'bug' ? BUG_THROTTLE_DAYS : THROTTLE_DAYS;
|
|
111
|
+
return Date.now() - lastSent < cooldownDays * 86400000;
|
|
112
|
+
}
|
|
113
|
+
catch {
|
|
114
|
+
return false;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
async function recordSent(irantiDir, rating) {
|
|
118
|
+
const file = path_1.default.join(irantiDir, 'feedback-sent.json');
|
|
119
|
+
let existing = {};
|
|
120
|
+
try {
|
|
121
|
+
existing = JSON.parse(await promises_1.default.readFile(file, 'utf8'));
|
|
122
|
+
}
|
|
123
|
+
catch { /* ok */ }
|
|
124
|
+
const updated = {
|
|
125
|
+
count: (existing.count ?? 0) + 1,
|
|
126
|
+
lastRating: rating,
|
|
127
|
+
lastSentAt: new Date().toISOString(),
|
|
128
|
+
};
|
|
129
|
+
await ensureDir(irantiDir);
|
|
130
|
+
await promises_1.default.writeFile(file, JSON.stringify(updated, null, 2) + '\n', 'utf8');
|
|
131
|
+
}
|
|
132
|
+
// ── Offline queue ─────────────────────────────────────────────────────────────
|
|
133
|
+
async function writePending(irantiDir, payload) {
|
|
134
|
+
const file = path_1.default.join(irantiDir, 'pending-feedback.json');
|
|
135
|
+
let pending = [];
|
|
136
|
+
try {
|
|
137
|
+
pending = JSON.parse(await promises_1.default.readFile(file, 'utf8'));
|
|
138
|
+
}
|
|
139
|
+
catch { /* ok */ }
|
|
140
|
+
pending.push({ ...payload, retryable: true });
|
|
141
|
+
await ensureDir(irantiDir);
|
|
142
|
+
await promises_1.default.writeFile(file, JSON.stringify(pending, null, 2) + '\n', 'utf8');
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Silently retry any queued offline submissions.
|
|
146
|
+
* Called at the top of runFeedbackCommand so no signal is permanently lost.
|
|
147
|
+
* Clears each entry as it succeeds; leaves failures for the next attempt.
|
|
148
|
+
*/
|
|
149
|
+
async function drainPendingQueue(irantiDir) {
|
|
150
|
+
const file = path_1.default.join(irantiDir, 'pending-feedback.json');
|
|
151
|
+
let pending;
|
|
152
|
+
try {
|
|
153
|
+
pending = JSON.parse(await promises_1.default.readFile(file, 'utf8'));
|
|
154
|
+
}
|
|
155
|
+
catch {
|
|
156
|
+
return; // nothing queued
|
|
157
|
+
}
|
|
158
|
+
if (pending.length === 0)
|
|
159
|
+
return;
|
|
160
|
+
const remaining = [];
|
|
161
|
+
for (const item of pending) {
|
|
162
|
+
try {
|
|
163
|
+
await postFeedback(item);
|
|
164
|
+
}
|
|
165
|
+
catch {
|
|
166
|
+
remaining.push(item);
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
if (remaining.length === 0) {
|
|
170
|
+
await promises_1.default.unlink(file).catch(() => { });
|
|
171
|
+
}
|
|
172
|
+
else {
|
|
173
|
+
await promises_1.default.writeFile(file, JSON.stringify(remaining, null, 2) + '\n', 'utf8');
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
// ── HTTP submission ───────────────────────────────────────────────────────────
|
|
177
|
+
function postFeedback(payload) {
|
|
178
|
+
return new Promise((resolve, reject) => {
|
|
179
|
+
const body = JSON.stringify(payload);
|
|
180
|
+
const url = new URL(ENDPOINT);
|
|
181
|
+
const req = https_1.default.request({
|
|
182
|
+
hostname: url.hostname,
|
|
183
|
+
path: url.pathname,
|
|
184
|
+
method: 'POST',
|
|
185
|
+
headers: {
|
|
186
|
+
'Content-Type': 'application/json',
|
|
187
|
+
'Content-Length': Buffer.byteLength(body),
|
|
188
|
+
},
|
|
189
|
+
timeout: TIMEOUT_MS,
|
|
190
|
+
}, (res) => {
|
|
191
|
+
if (res.statusCode && res.statusCode >= 200 && res.statusCode < 300) {
|
|
192
|
+
resolve();
|
|
193
|
+
}
|
|
194
|
+
else {
|
|
195
|
+
reject(new Error(`HTTP ${res.statusCode}`));
|
|
196
|
+
}
|
|
197
|
+
res.resume();
|
|
198
|
+
});
|
|
199
|
+
req.on('timeout', () => {
|
|
200
|
+
req.destroy();
|
|
201
|
+
reject(new Error('timeout'));
|
|
202
|
+
});
|
|
203
|
+
req.on('error', reject);
|
|
204
|
+
req.write(body);
|
|
205
|
+
req.end();
|
|
206
|
+
});
|
|
207
|
+
}
|
|
208
|
+
// ── Interactive prompts ───────────────────────────────────────────────────────
|
|
209
|
+
/**
|
|
210
|
+
* Read a single keypress without requiring Enter. Uses raw mode.
|
|
211
|
+
* Returns the key pressed, or throws 'ctrl_c' / 'not_tty'.
|
|
212
|
+
*/
|
|
213
|
+
function readSingleKey() {
|
|
214
|
+
return new Promise((resolve, reject) => {
|
|
215
|
+
const stdin = process.stdin;
|
|
216
|
+
if (!stdin.isTTY) {
|
|
217
|
+
reject(new Error('not_tty'));
|
|
218
|
+
return;
|
|
219
|
+
}
|
|
220
|
+
const wasRaw = stdin.isRaw ?? false;
|
|
221
|
+
try {
|
|
222
|
+
stdin.setRawMode(true);
|
|
223
|
+
}
|
|
224
|
+
catch {
|
|
225
|
+
reject(new Error('not_tty'));
|
|
226
|
+
return;
|
|
227
|
+
}
|
|
228
|
+
stdin.resume();
|
|
229
|
+
stdin.setEncoding('utf8');
|
|
230
|
+
const onData = (key) => {
|
|
231
|
+
stdin.removeListener('data', onData);
|
|
232
|
+
stdin.pause();
|
|
233
|
+
try {
|
|
234
|
+
stdin.setRawMode(wasRaw);
|
|
235
|
+
}
|
|
236
|
+
catch { /* ok */ }
|
|
237
|
+
if (key === '\u0003')
|
|
238
|
+
reject(new Error('ctrl_c'));
|
|
239
|
+
else
|
|
240
|
+
resolve(key);
|
|
241
|
+
};
|
|
242
|
+
stdin.on('data', onData);
|
|
243
|
+
});
|
|
244
|
+
}
|
|
245
|
+
/**
|
|
246
|
+
* Show the rating prompt and wait for a single keypress (1/2/3).
|
|
247
|
+
* Returns the chosen rating or null on cancellation/invalid input.
|
|
248
|
+
*/
|
|
249
|
+
async function promptRating() {
|
|
250
|
+
process.stdout.write('\n How\'s Iranti working for you?\n\n');
|
|
251
|
+
process.stdout.write(' \uD83D\uDE0A Great (1) \uD83D\uDE10 OK (2) \uD83D\uDE1E Not great (3)\n\n');
|
|
252
|
+
process.stdout.write(' Press 1, 2, or 3: ');
|
|
253
|
+
let key;
|
|
254
|
+
try {
|
|
255
|
+
key = await readSingleKey();
|
|
256
|
+
}
|
|
257
|
+
catch (err) {
|
|
258
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
259
|
+
if (msg === 'ctrl_c')
|
|
260
|
+
process.stdout.write('\n');
|
|
261
|
+
return null;
|
|
262
|
+
}
|
|
263
|
+
if (!['1', '2', '3'].includes(key)) {
|
|
264
|
+
process.stdout.write('\n (invalid key — type 1, 2, or 3)\n');
|
|
265
|
+
return null;
|
|
266
|
+
}
|
|
267
|
+
process.stdout.write(`${key}\n`);
|
|
268
|
+
return Number(key);
|
|
269
|
+
}
|
|
270
|
+
/**
|
|
271
|
+
* Prompt for an optional free-text comment. Enter submits, empty string skips.
|
|
272
|
+
*/
|
|
273
|
+
async function promptComment() {
|
|
274
|
+
process.stdout.write('\n Anything specific? (Enter to skip)\n > ');
|
|
275
|
+
return new Promise((resolve) => {
|
|
276
|
+
const rl = readline_1.default.createInterface({
|
|
277
|
+
input: process.stdin,
|
|
278
|
+
output: process.stdout,
|
|
279
|
+
terminal: process.stdout.isTTY,
|
|
280
|
+
});
|
|
281
|
+
rl.question('', (answer) => {
|
|
282
|
+
rl.close();
|
|
283
|
+
const trimmed = answer.trim();
|
|
284
|
+
resolve(trimmed.length > 0 ? trimmed : null);
|
|
285
|
+
});
|
|
286
|
+
});
|
|
287
|
+
}
|
|
288
|
+
// ── Main entrypoint ───────────────────────────────────────────────────────────
|
|
289
|
+
/**
|
|
290
|
+
* Run the full feedback collection flow.
|
|
291
|
+
*
|
|
292
|
+
* Respects user's time: throttled by default (7 days), bugs by 1 day.
|
|
293
|
+
* If the endpoint is unreachable, saves to .iranti/pending-feedback.json
|
|
294
|
+
* for silent retry on the next run.
|
|
295
|
+
*/
|
|
296
|
+
async function runFeedbackCommand(opts) {
|
|
297
|
+
const irantiDir = resolveIrantiDir();
|
|
298
|
+
const type = opts.type ?? 'general';
|
|
299
|
+
// Silently drain any queued offline submissions first.
|
|
300
|
+
if (!opts.dryRun && !opts.offline) {
|
|
301
|
+
await drainPendingQueue(irantiDir).catch(() => { });
|
|
302
|
+
}
|
|
303
|
+
if (!opts.dryRun && !opts.offline) {
|
|
304
|
+
if (await isThrottled(irantiDir, type)) {
|
|
305
|
+
const days = type === 'bug' ? BUG_THROTTLE_DAYS : THROTTLE_DAYS;
|
|
306
|
+
console.log(` Feedback already submitted recently. You can send again after ${days} day${days === 1 ? '' : 's'}.`);
|
|
307
|
+
if (type !== 'bug')
|
|
308
|
+
console.log(' To report a bug sooner: iranti feedback --type bug');
|
|
309
|
+
return;
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
let rating;
|
|
313
|
+
if (opts.rating !== undefined) {
|
|
314
|
+
rating = opts.rating;
|
|
315
|
+
}
|
|
316
|
+
else {
|
|
317
|
+
const interactive = await promptRating();
|
|
318
|
+
if (interactive === null)
|
|
319
|
+
return;
|
|
320
|
+
rating = interactive;
|
|
321
|
+
}
|
|
322
|
+
let comment;
|
|
323
|
+
if (opts.comment !== undefined) {
|
|
324
|
+
comment = opts.comment;
|
|
325
|
+
}
|
|
326
|
+
else {
|
|
327
|
+
comment = await promptComment();
|
|
328
|
+
}
|
|
329
|
+
const stats = await readSessionStats(irantiDir);
|
|
330
|
+
const instanceId = await getOrCreateInstanceId(irantiDir);
|
|
331
|
+
const payload = {
|
|
332
|
+
feedbackId: (0, crypto_1.randomUUID)(),
|
|
333
|
+
rating,
|
|
334
|
+
comment,
|
|
335
|
+
type,
|
|
336
|
+
version: opts.version,
|
|
337
|
+
os: process.platform,
|
|
338
|
+
arch: process.arch,
|
|
339
|
+
nodeVersion: process.version,
|
|
340
|
+
sessionCount: stats?.totalSessions ?? null,
|
|
341
|
+
factCount: opts.factCount ?? null,
|
|
342
|
+
instanceId,
|
|
343
|
+
milestoneContext: opts.milestoneContext ?? null,
|
|
344
|
+
submittedAt: new Date().toISOString(),
|
|
345
|
+
};
|
|
346
|
+
if (opts.dryRun) {
|
|
347
|
+
console.log('\n [dry-run] Payload that would be sent:\n');
|
|
348
|
+
console.log(JSON.stringify(payload, null, 2));
|
|
349
|
+
return;
|
|
350
|
+
}
|
|
351
|
+
if (opts.offline) {
|
|
352
|
+
await writePending(irantiDir, payload);
|
|
353
|
+
console.log('\n Saved locally \u2014 will retry next time.');
|
|
354
|
+
return;
|
|
355
|
+
}
|
|
356
|
+
try {
|
|
357
|
+
await postFeedback(payload);
|
|
358
|
+
await recordSent(irantiDir, rating);
|
|
359
|
+
const label = RATING_LABELS[rating] ?? String(rating);
|
|
360
|
+
const lines = [
|
|
361
|
+
'',
|
|
362
|
+
` \u2713 Got it \u2014 thanks for the signal.`,
|
|
363
|
+
'',
|
|
364
|
+
` ${label}${type !== 'general' ? ` \u00b7 ${type}` : ''}`,
|
|
365
|
+
];
|
|
366
|
+
if (comment)
|
|
367
|
+
lines.push(` \u201c${comment}\u201d`);
|
|
368
|
+
lines.push('');
|
|
369
|
+
lines.push(' This goes directly to the team. It actually matters.');
|
|
370
|
+
lines.push('');
|
|
371
|
+
process.stdout.write(lines.join('\n') + '\n');
|
|
372
|
+
}
|
|
373
|
+
catch {
|
|
374
|
+
await writePending(irantiDir, payload);
|
|
375
|
+
process.stdout.write('\n Saved locally \u2014 will retry next time.\n\n');
|
|
376
|
+
}
|
|
377
|
+
}
|
|
378
|
+
//# sourceMappingURL=feedbackCollector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"feedbackCollector.js","sourceRoot":"","sources":["../../../src/lib/feedbackCollector.ts"],"names":[],"mappings":"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"}
|