@oh-my-pi/pi-coding-agent 15.1.2 โ 15.1.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +60 -0
- package/dist/types/async/job-manager.d.ts +3 -2
- package/dist/types/cli/auth-broker-cli.d.ts +25 -0
- package/dist/types/cli/auth-gateway-cli.d.ts +18 -0
- package/dist/types/cli/grievances-cli.d.ts +12 -0
- package/dist/types/commands/auth-broker.d.ts +54 -0
- package/dist/types/commands/auth-gateway.d.ts +32 -0
- package/dist/types/commands/grievances.d.ts +1 -1
- package/dist/types/commit/agentic/tools/propose-commit.d.ts +9 -1
- package/dist/types/commit/agentic/tools/schemas.d.ts +9 -1
- package/dist/types/commit/agentic/tools/split-commit.d.ts +9 -1
- package/dist/types/config/model-registry.d.ts +3 -0
- package/dist/types/config/models-config-schema.d.ts +1 -0
- package/dist/types/config/settings-schema.d.ts +46 -0
- package/dist/types/discovery/agents.d.ts +12 -1
- package/dist/types/edit/renderer.d.ts +3 -0
- package/dist/types/eval/index.d.ts +0 -2
- package/dist/types/goals/tools/goal-tool.d.ts +10 -2
- package/dist/types/index.d.ts +0 -1
- package/dist/types/internal-urls/index.d.ts +1 -1
- package/dist/types/internal-urls/{pi-protocol.d.ts โ omp-protocol.d.ts} +3 -3
- package/dist/types/internal-urls/types.d.ts +1 -1
- package/dist/types/main.d.ts +11 -2
- package/dist/types/modes/acp/acp-agent.d.ts +2 -1
- package/dist/types/modes/acp/acp-event-mapper.d.ts +13 -1
- package/dist/types/modes/acp/acp-mode.d.ts +3 -1
- package/dist/types/modes/emoji-autocomplete.d.ts +16 -0
- package/dist/types/modes/interactive-mode.d.ts +1 -1
- package/dist/types/modes/prompt-action-autocomplete.d.ts +4 -0
- package/dist/types/plan-mode/approved-plan.d.ts +10 -4
- package/dist/types/sdk.d.ts +10 -3
- package/dist/types/session/agent-session.d.ts +7 -3
- package/dist/types/session/auth-broker-config.d.ts +13 -0
- package/dist/types/session/auth-storage.d.ts +1 -1
- package/dist/types/session/client-bridge.d.ts +3 -0
- package/dist/types/tools/eval.d.ts +41 -7
- package/dist/types/tools/irc.d.ts +8 -2
- package/dist/types/tools/report-tool-issue.d.ts +118 -1
- package/dist/types/tools/resolve.d.ts +8 -2
- package/examples/custom-tools/README.md +3 -12
- package/examples/extensions/README.md +2 -15
- package/examples/extensions/api-demo.ts +1 -7
- package/package.json +7 -7
- package/src/async/job-manager.ts +111 -13
- package/src/autoresearch/tools/init-experiment.ts +11 -33
- package/src/autoresearch/tools/log-experiment.ts +10 -24
- package/src/autoresearch/tools/run-experiment.ts +1 -1
- package/src/autoresearch/tools/update-notes.ts +2 -9
- package/src/cli/auth-broker-cli.ts +746 -0
- package/src/cli/auth-gateway-cli.ts +342 -0
- package/src/cli/grievances-cli.ts +109 -16
- package/src/cli/update-cli.ts +1 -5
- package/src/cli.ts +4 -2
- package/src/commands/auth-broker.ts +96 -0
- package/src/commands/auth-gateway.ts +61 -0
- package/src/commands/grievances.ts +13 -8
- package/src/commands/launch.ts +1 -1
- package/src/commit/agentic/agent.ts +2 -0
- package/src/commit/agentic/tools/analyze-file.ts +2 -2
- package/src/commit/agentic/tools/git-file-diff.ts +2 -2
- package/src/commit/agentic/tools/git-hunk.ts +3 -3
- package/src/commit/agentic/tools/git-overview.ts +2 -2
- package/src/commit/agentic/tools/propose-changelog.ts +1 -3
- package/src/commit/agentic/tools/recent-commits.ts +1 -1
- package/src/commit/agentic/tools/schemas.ts +1 -9
- package/src/config/model-equivalence.ts +279 -174
- package/src/config/model-registry.ts +37 -6
- package/src/config/model-resolver.ts +13 -8
- package/src/config/models-config-schema.ts +8 -0
- package/src/config/settings-schema.ts +52 -0
- package/src/cursor.ts +1 -1
- package/src/debug/log-formatting.ts +1 -1
- package/src/debug/log-viewer.ts +1 -1
- package/src/debug/profiler.ts +4 -0
- package/src/debug/raw-sse-buffer.ts +100 -59
- package/src/debug/raw-sse.ts +1 -1
- package/src/discovery/agents.ts +15 -4
- package/src/edit/modes/apply-patch.ts +1 -5
- package/src/edit/modes/patch.ts +5 -5
- package/src/edit/modes/replace.ts +5 -5
- package/src/edit/renderer.ts +2 -1
- package/src/edit/streaming.ts +1 -1
- package/src/eval/index.ts +0 -2
- package/src/eval/js/shared/runtime.ts +107 -2
- package/src/eval/py/kernel.ts +1 -1
- package/src/exa/researcher.ts +4 -4
- package/src/exa/search.ts +10 -22
- package/src/exa/websets.ts +33 -33
- package/src/extensibility/typebox.ts +44 -17
- package/src/goals/tools/goal-tool.ts +3 -3
- package/src/index.ts +0 -3
- package/src/internal-urls/docs-index.generated.ts +21 -18
- package/src/internal-urls/index.ts +1 -1
- package/src/internal-urls/{pi-protocol.ts โ omp-protocol.ts} +10 -10
- package/src/internal-urls/router.ts +3 -3
- package/src/internal-urls/types.ts +1 -1
- package/src/lsp/types.ts +8 -11
- package/src/main.ts +216 -146
- package/src/mcp/tool-bridge.ts +3 -3
- package/src/modes/acp/acp-agent.ts +203 -57
- package/src/modes/acp/acp-client-bridge.ts +2 -1
- package/src/modes/acp/acp-event-mapper.ts +208 -32
- package/src/modes/acp/acp-mode.ts +11 -3
- package/src/modes/components/bash-execution.ts +1 -1
- package/src/modes/components/diff.ts +1 -2
- package/src/modes/components/eval-execution.ts +1 -1
- package/src/modes/components/oauth-selector.ts +38 -2
- package/src/modes/components/tool-execution.ts +1 -2
- package/src/modes/components/tree-selector.ts +26 -7
- package/src/modes/controllers/command-controller.ts +95 -34
- package/src/modes/controllers/input-controller.ts +4 -3
- package/src/modes/data/emojis.json +1 -0
- package/src/modes/emoji-autocomplete.ts +285 -0
- package/src/modes/interactive-mode.ts +92 -19
- package/src/modes/print-mode.ts +3 -3
- package/src/modes/prompt-action-autocomplete.ts +14 -0
- package/src/plan-mode/approved-plan.ts +30 -9
- package/src/prompts/system/system-prompt.md +1 -1
- package/src/prompts/system/ttsr-tool-reminder.md +5 -0
- package/src/prompts/tools/ask.md +4 -3
- package/src/prompts/tools/eval.md +25 -26
- package/src/prompts/tools/read.md +1 -1
- package/src/prompts/tools/resolve.md +1 -1
- package/src/prompts/tools/search.md +1 -1
- package/src/prompts/tools/web-search.md +1 -1
- package/src/sdk.ts +81 -8
- package/src/session/agent-session.ts +362 -131
- package/src/session/agent-storage.ts +7 -2
- package/src/session/auth-broker-config.ts +102 -0
- package/src/session/auth-storage.ts +7 -1
- package/src/session/client-bridge.ts +3 -0
- package/src/session/streaming-output.ts +1 -1
- package/src/task/types.ts +10 -35
- package/src/tools/bash-interactive.ts +4 -1
- package/src/tools/bash-pty-selection.ts +2 -2
- package/src/tools/browser.ts +12 -20
- package/src/tools/eval.ts +77 -100
- package/src/tools/gh.ts +21 -45
- package/src/tools/hindsight-recall.ts +1 -1
- package/src/tools/hindsight-reflect.ts +2 -2
- package/src/tools/hindsight-retain.ts +3 -7
- package/src/tools/index.ts +8 -1
- package/src/tools/inspect-image.ts +4 -1
- package/src/tools/irc.ts +4 -12
- package/src/tools/job.ts +3 -11
- package/src/tools/report-tool-issue.ts +462 -17
- package/src/tools/resolve.ts +2 -7
- package/src/tools/todo-write.ts +8 -15
- package/src/utils/title-generator.ts +3 -0
- package/src/web/search/index.ts +6 -6
- package/dist/types/eval/parse.d.ts +0 -28
- package/dist/types/eval/sniff.d.ts +0 -11
- package/src/eval/eval.lark +0 -36
- package/src/eval/parse.ts +0 -407
- package/src/eval/sniff.ts +0 -28
|
@@ -374,10 +374,15 @@ export class CommandController {
|
|
|
374
374
|
const openaiWebsocketSetting = this.ctx.settings.get("providers.openaiWebsockets") ?? "auto";
|
|
375
375
|
const preferOpenAICodexWebsockets =
|
|
376
376
|
openaiWebsocketSetting === "on" ? true : openaiWebsocketSetting === "off" ? false : undefined;
|
|
377
|
+
const credentialSource = this.ctx.session.modelRegistry.authStorage.describeCredentialSource(
|
|
378
|
+
model.provider,
|
|
379
|
+
stats.sessionId,
|
|
380
|
+
);
|
|
377
381
|
const providerDetails = getProviderDetails({
|
|
378
382
|
model,
|
|
379
383
|
sessionId: stats.sessionId,
|
|
380
384
|
authMode,
|
|
385
|
+
credentialSource,
|
|
381
386
|
preferWebsockets: preferOpenAICodexWebsockets,
|
|
382
387
|
providerSessionState: this.ctx.session.providerSessionState,
|
|
383
388
|
});
|
|
@@ -503,7 +508,8 @@ export class CommandController {
|
|
|
503
508
|
return;
|
|
504
509
|
}
|
|
505
510
|
|
|
506
|
-
const
|
|
511
|
+
const availableWidth = Math.max(40, (this.ctx.ui.terminal.columns ?? 100) - 2);
|
|
512
|
+
const output = renderUsageReports(usageReports, theme, Date.now(), availableWidth);
|
|
507
513
|
this.ctx.chatContainer.addChild(new Spacer(1));
|
|
508
514
|
this.ctx.chatContainer.addChild(new Text(output, 1, 0));
|
|
509
515
|
this.ctx.ui.requestRender();
|
|
@@ -1237,8 +1243,8 @@ export class CommandController {
|
|
|
1237
1243
|
}
|
|
1238
1244
|
}
|
|
1239
1245
|
|
|
1240
|
-
const
|
|
1241
|
-
const
|
|
1246
|
+
const BAR_WIDTH_MAX = 24;
|
|
1247
|
+
const BAR_WIDTH_MIN = 4;
|
|
1242
1248
|
|
|
1243
1249
|
function renderJobLine(job: AsyncJobSnapshotItem, now: number): string {
|
|
1244
1250
|
const duration = formatDuration(Math.max(0, now - job.startTime));
|
|
@@ -1266,6 +1272,7 @@ function truncateJobLabel(label: string, maxWidth: number): string {
|
|
|
1266
1272
|
|
|
1267
1273
|
return `${out}โฆ`;
|
|
1268
1274
|
}
|
|
1275
|
+
|
|
1269
1276
|
function formatProviderName(provider: string): string {
|
|
1270
1277
|
return provider
|
|
1271
1278
|
.split(/[-_]/g)
|
|
@@ -1277,10 +1284,6 @@ function formatNumber(value: number, maxFractionDigits = 1): string {
|
|
|
1277
1284
|
return new Intl.NumberFormat("en-US", { maximumFractionDigits: maxFractionDigits }).format(value);
|
|
1278
1285
|
}
|
|
1279
1286
|
|
|
1280
|
-
function formatUsedAccounts(value: number): string {
|
|
1281
|
-
return `${value.toFixed(2)} used`;
|
|
1282
|
-
}
|
|
1283
|
-
|
|
1284
1287
|
function resolveProviderAuthMode(authStorage: AuthStorage, provider: string): string {
|
|
1285
1288
|
if (authStorage.hasOAuth(provider)) {
|
|
1286
1289
|
return "oauth";
|
|
@@ -1364,11 +1367,39 @@ function formatResetShort(limit: UsageLimit, nowMs: number): string | undefined
|
|
|
1364
1367
|
return undefined;
|
|
1365
1368
|
}
|
|
1366
1369
|
|
|
1367
|
-
function
|
|
1368
|
-
|
|
1369
|
-
|
|
1370
|
-
|
|
1371
|
-
|
|
1370
|
+
function formatAccountHeaderRow(
|
|
1371
|
+
limits: UsageLimit[],
|
|
1372
|
+
reports: UsageReport[],
|
|
1373
|
+
nowMs: number,
|
|
1374
|
+
columnWidth: number,
|
|
1375
|
+
uiTheme: typeof theme,
|
|
1376
|
+
): string[] {
|
|
1377
|
+
const parts = limits.map((limit, index) => {
|
|
1378
|
+
const reset = formatResetShort(limit, nowMs);
|
|
1379
|
+
return {
|
|
1380
|
+
label: formatAccountLabel(limit, reports[index], index),
|
|
1381
|
+
suffix: reset ? `(${reset})` : "",
|
|
1382
|
+
};
|
|
1383
|
+
});
|
|
1384
|
+
const maxSuffixWidth = parts.reduce((max, p) => Math.max(max, visibleWidth(p.suffix)), 0);
|
|
1385
|
+
const gap = maxSuffixWidth > 0 ? 1 : 0;
|
|
1386
|
+
const prefixBudget = columnWidth - maxSuffixWidth - gap;
|
|
1387
|
+
|
|
1388
|
+
// If suffix can't share the cell with at least `xโฆ`, fall back to whole-label truncation.
|
|
1389
|
+
if (prefixBudget < 2) {
|
|
1390
|
+
return parts.map(p => {
|
|
1391
|
+
const full = p.suffix ? `${p.label} ${p.suffix}` : p.label;
|
|
1392
|
+
return padColumn(truncateJobLabel(full, columnWidth), columnWidth);
|
|
1393
|
+
});
|
|
1394
|
+
}
|
|
1395
|
+
|
|
1396
|
+
return parts.map(p => {
|
|
1397
|
+
const prefix = truncateJobLabel(p.label, prefixBudget);
|
|
1398
|
+
const prefixCell = prefix + " ".repeat(prefixBudget - visibleWidth(prefix));
|
|
1399
|
+
if (!p.suffix) return prefixCell + " ".repeat(maxSuffixWidth + gap);
|
|
1400
|
+
const suffixPad = " ".repeat(maxSuffixWidth - visibleWidth(p.suffix));
|
|
1401
|
+
return `${prefixCell} ${suffixPad}${uiTheme.fg("dim", p.suffix)}`;
|
|
1402
|
+
});
|
|
1372
1403
|
}
|
|
1373
1404
|
|
|
1374
1405
|
function padColumn(text: string, width: number): string {
|
|
@@ -1395,10 +1426,8 @@ function formatAggregateAmount(limits: UsageLimit[]): string {
|
|
|
1395
1426
|
.filter((value): value is number => value !== undefined);
|
|
1396
1427
|
if (fractions.length === limits.length && fractions.length > 0) {
|
|
1397
1428
|
const sum = fractions.reduce((total, value) => total + value, 0);
|
|
1398
|
-
const
|
|
1399
|
-
|
|
1400
|
-
const avgRemaining = limits.length > 0 ? remainingPct / limits.length : remainingPct;
|
|
1401
|
-
return `${formatUsedAccounts(sum)} (${formatNumber(avgRemaining)}% left)`;
|
|
1429
|
+
const avgRemaining = Math.max(0, ((limits.length - sum) / limits.length) * 100);
|
|
1430
|
+
return `${formatNumber(avgRemaining)}% free`;
|
|
1402
1431
|
}
|
|
1403
1432
|
|
|
1404
1433
|
const amounts = limits
|
|
@@ -1407,13 +1436,11 @@ function formatAggregateAmount(limits: UsageLimit[]): string {
|
|
|
1407
1436
|
if (amounts.length === limits.length && amounts.length > 0) {
|
|
1408
1437
|
const totalUsed = amounts.reduce((sum, amount) => sum + (amount.used ?? 0), 0);
|
|
1409
1438
|
const totalLimit = amounts.reduce((sum, amount) => sum + (amount.limit ?? 0), 0);
|
|
1410
|
-
const
|
|
1411
|
-
|
|
1412
|
-
const usedAccounts = totalLimit > 0 ? (usedPct / 100) * limits.length : 0;
|
|
1413
|
-
return `${formatUsedAccounts(usedAccounts)} (${formatNumber(remainingPct)}% left)`;
|
|
1439
|
+
const remainingPct = totalLimit > 0 ? Math.max(0, 100 - (totalUsed / totalLimit) * 100) : 0;
|
|
1440
|
+
return `${formatNumber(remainingPct)}% free`;
|
|
1414
1441
|
}
|
|
1415
1442
|
|
|
1416
|
-
return
|
|
1443
|
+
return `${limits.length} accts`;
|
|
1417
1444
|
}
|
|
1418
1445
|
|
|
1419
1446
|
function resolveResetRange(limits: UsageLimit[], nowMs: number): string | null {
|
|
@@ -1444,20 +1471,47 @@ function resolveStatusColor(status: UsageLimit["status"]): "success" | "warning"
|
|
|
1444
1471
|
return "dim";
|
|
1445
1472
|
}
|
|
1446
1473
|
|
|
1447
|
-
function renderUsageBar(limit: UsageLimit, uiTheme: typeof theme): string {
|
|
1474
|
+
function renderUsageBar(limit: UsageLimit, uiTheme: typeof theme, barWidth: number): string {
|
|
1448
1475
|
const fraction = resolveFraction(limit);
|
|
1449
1476
|
if (fraction === undefined) {
|
|
1450
|
-
return uiTheme.fg("dim",
|
|
1477
|
+
return uiTheme.fg("dim", "ยท".repeat(barWidth));
|
|
1451
1478
|
}
|
|
1452
1479
|
const clamped = Math.min(Math.max(fraction, 0), 1);
|
|
1453
|
-
const
|
|
1454
|
-
const
|
|
1455
|
-
const
|
|
1480
|
+
const exact = clamped * barWidth;
|
|
1481
|
+
const fullCells = Math.floor(exact);
|
|
1482
|
+
const remainder = exact - fullCells;
|
|
1483
|
+
let partial = "";
|
|
1484
|
+
if (remainder >= 2 / 3) partial = "โ";
|
|
1485
|
+
else if (remainder >= 1 / 3) partial = "โ";
|
|
1486
|
+
const leading = "โ".repeat(fullCells) + partial;
|
|
1487
|
+
const empty = "โ".repeat(Math.max(0, barWidth - fullCells - (partial ? 1 : 0)));
|
|
1456
1488
|
const color = resolveStatusColor(limit.status);
|
|
1457
|
-
return `${uiTheme.fg(
|
|
1489
|
+
return `${uiTheme.fg(color, leading)}${uiTheme.fg("dim", empty)}`;
|
|
1490
|
+
}
|
|
1491
|
+
|
|
1492
|
+
/**
|
|
1493
|
+
* Pick a per-column width so n bars + a trailing amount string fit in `available` columns.
|
|
1494
|
+
* Falls back to the minimum when the terminal is too narrow rather than wrapping.
|
|
1495
|
+
*/
|
|
1496
|
+
function resolveColumnWidth(count: number, available: number, trailing: number): number {
|
|
1497
|
+
if (count <= 0) return BAR_WIDTH_MAX;
|
|
1498
|
+
const indent = 2;
|
|
1499
|
+
const gaps = count - 1;
|
|
1500
|
+
const spaceForBars = available - indent - gaps - (trailing > 0 ? trailing + 1 : 0);
|
|
1501
|
+
const ideal = Math.floor(spaceForBars / count);
|
|
1502
|
+
const min = BAR_WIDTH_MIN;
|
|
1503
|
+
const max = BAR_WIDTH_MAX;
|
|
1504
|
+
if (ideal < min) return min;
|
|
1505
|
+
if (ideal > max) return max;
|
|
1506
|
+
return ideal;
|
|
1458
1507
|
}
|
|
1459
1508
|
|
|
1460
|
-
function renderUsageReports(
|
|
1509
|
+
function renderUsageReports(
|
|
1510
|
+
reports: UsageReport[],
|
|
1511
|
+
uiTheme: typeof theme,
|
|
1512
|
+
nowMs: number,
|
|
1513
|
+
availableWidth: number,
|
|
1514
|
+
): string {
|
|
1461
1515
|
const lines: string[] = [];
|
|
1462
1516
|
const latestFetchedAt = Math.max(...reports.map(report => report.fetchedAt ?? 0));
|
|
1463
1517
|
const headerSuffix = latestFetchedAt ? ` (${formatDuration(nowMs - latestFetchedAt)} ago)` : "";
|
|
@@ -1506,7 +1560,7 @@ function renderUsageReports(reports: UsageReport[], uiTheme: typeof theme, nowMs
|
|
|
1506
1560
|
|
|
1507
1561
|
lines.push(uiTheme.bold(uiTheme.fg("accent", providerName)));
|
|
1508
1562
|
|
|
1509
|
-
|
|
1563
|
+
const renderableGroups = Array.from(limitGroups.values()).map(group => {
|
|
1510
1564
|
const entries = group.limits.map((limit, index) => ({
|
|
1511
1565
|
limit,
|
|
1512
1566
|
report: group.reports[index],
|
|
@@ -1521,18 +1575,25 @@ function renderUsageReports(reports: UsageReport[], uiTheme: typeof theme, nowMs
|
|
|
1521
1575
|
});
|
|
1522
1576
|
const sortedLimits = entries.map(entry => entry.limit);
|
|
1523
1577
|
const sortedReports = entries.map(entry => entry.report);
|
|
1578
|
+
return { group, sortedLimits, sortedReports, amountText: formatAggregateAmount(sortedLimits) };
|
|
1579
|
+
});
|
|
1524
1580
|
|
|
1581
|
+
const sectionCount = renderableGroups.reduce((max, g) => Math.max(max, g.sortedLimits.length), 0);
|
|
1582
|
+
const sectionTrailing = renderableGroups.reduce((max, g) => Math.max(max, visibleWidth(g.amountText)), 0);
|
|
1583
|
+
const sectionColumnWidth = resolveColumnWidth(sectionCount, availableWidth, sectionTrailing);
|
|
1584
|
+
|
|
1585
|
+
for (const { group, sortedLimits, sortedReports, amountText } of renderableGroups) {
|
|
1525
1586
|
const status = resolveAggregateStatus(sortedLimits);
|
|
1526
1587
|
const statusIcon = resolveStatusIcon(status, uiTheme);
|
|
1527
1588
|
|
|
1528
1589
|
const windowSuffix = formatWindowSuffix(group.label, group.windowLabel, uiTheme);
|
|
1529
1590
|
lines.push(`${statusIcon} ${uiTheme.bold(group.label)} ${windowSuffix}`.trim());
|
|
1530
|
-
const accountLabels = sortedLimits
|
|
1531
|
-
padColumn(formatAccountHeader(limit, sortedReports[index], index, nowMs), COLUMN_WIDTH),
|
|
1532
|
-
);
|
|
1591
|
+
const accountLabels = formatAccountHeaderRow(sortedLimits, sortedReports, nowMs, sectionColumnWidth, uiTheme);
|
|
1533
1592
|
lines.push(` ${accountLabels.join(" ")}`.trimEnd());
|
|
1534
|
-
const bars = sortedLimits.map(limit =>
|
|
1535
|
-
|
|
1593
|
+
const bars = sortedLimits.map(limit =>
|
|
1594
|
+
padColumn(renderUsageBar(limit, uiTheme, sectionColumnWidth), sectionColumnWidth),
|
|
1595
|
+
);
|
|
1596
|
+
lines.push(` ${bars.join(" ")} ${amountText}`.trimEnd());
|
|
1536
1597
|
const resetText = sortedLimits.length <= 1 ? resolveResetRange(sortedLimits, nowMs) : null;
|
|
1537
1598
|
if (resetText) {
|
|
1538
1599
|
lines.push(` ${uiTheme.fg("dim", resetText)}`.trimEnd());
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import * as fs from "node:fs/promises";
|
|
2
2
|
import { type AgentMessage, ThinkingLevel } from "@oh-my-pi/pi-agent-core";
|
|
3
|
-
import { sanitizeText } from "@oh-my-pi/pi-natives";
|
|
4
3
|
import type { AutocompleteProvider, SlashCommand } from "@oh-my-pi/pi-tui";
|
|
5
|
-
import { $env } from "@oh-my-pi/pi-utils";
|
|
6
|
-
import { settings } from "../../config/settings";
|
|
4
|
+
import { $env, sanitizeText } from "@oh-my-pi/pi-utils";
|
|
5
|
+
import { isSettingsInitialized, settings } from "../../config/settings";
|
|
6
|
+
import { expandEmoticons } from "../../modes/emoji-autocomplete";
|
|
7
7
|
import { createPromptActionAutocompleteProvider } from "../../modes/prompt-action-autocomplete";
|
|
8
8
|
import { theme } from "../../modes/theme/theme";
|
|
9
9
|
import type { InteractiveModeContext } from "../../modes/types";
|
|
@@ -187,6 +187,7 @@ export class InputController {
|
|
|
187
187
|
setupEditorSubmitHandler(): void {
|
|
188
188
|
this.ctx.editor.onSubmit = async (text: string) => {
|
|
189
189
|
text = text.trim();
|
|
190
|
+
if ((!isSettingsInitialized() || settings.get("emojiAutocomplete")) && text) text = expandEmoticons(text);
|
|
190
191
|
|
|
191
192
|
// Empty submit while streaming with queued messages: flush queues immediately
|
|
192
193
|
if (!text && this.ctx.session.isStreaming && this.ctx.session.queuedMessageCount > 0) {
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"1":[["100","๐ฏ"],["1234","๐ข"],["1st_place_medal","๐ฅ"]],"2":[["2nd_place_medal","๐ฅ"]],"3":[["3rd_place_medal","๐ฅ"]],"8":[["8ball","๐ฑ"]],"+":[["+1","๐"]],"-":[["-1","๐"]],"a":[["a","๐
ฐ๏ธ"],["ab","๐"],["abacus","๐งฎ"],["abc","๐ค"],["abcd","๐ก"],["accept","๐"],["adult","๐ง"],["aerial_tramway","๐ก"],["afk","๐ถ"],["agree","๐"],["airplane","โ๏ธ"],["alarm_clock","โฐ"],["alembic","โ"],["alien","๐ฝ"],["amazing","๐คฉ"],["ambulance","๐"],["amphora","๐บ"],["anchor","โ"],["angel","๐ผ"],["anger","๐ข"],["angry","๐ "],["anguished","๐ง"],["ant","๐"],["applause","๐"],["apple","๐"],["aquarius","โ"],["aries","โ"],["arrow_backward","โ๏ธ"],["arrow_double_down","โฌ"],["arrow_double_up","โซ"],["arrow_down","โฌ๏ธ"],["arrow_down_small","๐ฝ"],["arrow_forward","โถ๏ธ"],["arrow_heading_down","โคต๏ธ"],["arrow_heading_up","โคด๏ธ"],["arrow_left","โฌ
๏ธ"],["arrow_lower_left","โ๏ธ"],["arrow_lower_right","โ๏ธ"],["arrow_right","โก๏ธ"],["arrow_right_hook","โช๏ธ"],["arrow_up","โฌ๏ธ"],["arrow_up_down","โ๏ธ"],["arrow_up_small","๐ผ"],["arrow_upper_left","โ๏ธ"],["arrow_upper_right","โ๏ธ"],["arrows_clockwise","๐"],["arrows_counterclockwise","๐"],["art","๐จ"],["articulated_lorry","๐"],["artificial_satellite","๐ฐ"],["asterisk","*โฃ"],["astonished","๐ฒ"],["athletic_shoe","๐"],["atm","๐ง"],["atom_symbol","โ"],["avocado","๐ฅ"],["awesome","๐"],["aww","๐ฅน"]],"b":[["b","๐
ฑ๏ธ"],["baby","๐ถ"],["baby_bottle","๐ผ"],["baby_chick","๐ค"],["baby_symbol","๐ผ"],["back","๐"],["bacon","๐ฅ"],["badger","๐ฆก"],["badminton","๐ธ"],["bae","๐"],["bagel","๐ฅฏ"],["baggage_claim","๐"],["baguette_bread","๐ฅ"],["balance_scale","โ"],["balloon","๐"],["ballot_box","๐ณ"],["ballot_box_with_check","โ๏ธ"],["bamboo","๐"],["banana","๐"],["bangbang","โผ๏ธ"],["bank","๐ฆ"],["bar_chart","๐"],["barber","๐"],["baseball","โพ"],["basket","๐งบ"],["basketball","๐"],["basketball_man","โน"],["basketball_woman","โน๏ธโโ๏ธ"],["bat","๐ฆ"],["bath","๐"],["bathtub","๐"],["battery","๐"],["bawling","๐ญ"],["bday","๐ฅณ"],["beach_umbrella","๐"],["bear","๐ป"],["bearded_person","๐ง"],["bed","๐"],["beer","๐บ"],["beers","๐ป"],["beetle","๐"],["beginner","๐ฐ"],["bell","๐"],["bellhop_bell","๐"],["bento","๐ฑ"],["bet","๐"],["bike","๐ฒ"],["biking_man","๐ด"],["biking_woman","๐ดโโ๏ธ"],["bikini","๐"],["billed_hat","๐งข"],["biohazard","โฃ"],["bird","๐ฆ"],["birthday","๐"],["black_circle","โซ"],["black_flag","๐ด"],["black_heart","๐ค"],["black_joker","๐"],["black_large_square","โฌ"],["black_medium_small_square","โพ"],["black_medium_square","โผ๏ธ"],["black_nib","โ๏ธ"],["black_small_square","โช๏ธ"],["black_square_button","๐ฒ"],["blonde_man","๐ฑ"],["blonde_woman","๐ฑโโ๏ธ"],["blossom","๐ผ"],["blowfish","๐ก"],["blue_book","๐"],["blue_car","๐"],["blue_heart","๐"],["blush","๐"],["boar","๐"],["bomb","๐ฃ"],["bone","๐ฆด"],["bookmark","๐"],["bookmark_tabs","๐"],["books","๐"],["boom","๐ฅ"],["boot","๐ข"],["bored","๐ฅฑ"],["bouquet","๐"],["bow_and_arrow","๐น"],["bowing_man","๐"],["bowing_woman","๐โโ๏ธ"],["bowl_with_spoon","๐ฅฃ"],["bowling","๐ณ"],["boxing_glove","๐ฅ"],["boy","๐ฆ"],["brain","๐ง "],["brb","๐"],["bread","๐"],["breastfeeding","๐คฑ"],["brick","๐งฑ"],["bride_with_veil","๐ฐ"],["bridge_at_night","๐"],["briefcase","๐ผ"],["broccoli","๐ฅฆ"],["broken_heart","๐"],["broom","๐งน"],["bruh","๐"],["bs","๐ฉ"],["bug","๐"],["building_construction","๐"],["bulb","๐ก"],["bullettrain_front","๐
"],["bullettrain_side","๐"],["bump","๐"],["burrito","๐ฏ"],["bus","๐"],["business_suit_levitating","๐ด"],["busstop","๐"],["bust_in_silhouette","๐ค"],["busts_in_silhouette","๐ฅ"],["butterfly","๐ฆ"],["bye","๐"]],"c":[["cactus","๐ต"],["cake","๐ฐ"],["calendar","๐"],["call_me_hand","๐ค"],["calling","๐ฒ"],["camel","๐ซ"],["camera","๐ท"],["camera_flash","๐ธ"],["camping","๐"],["cancer","โ"],["candle","๐ฏ"],["candy","๐ฌ"],["canned_food","๐ฅซ"],["canoe","๐ถ"],["capital_abcd","๐ "],["capricorn","โ"],["card_file_box","๐"],["card_index","๐"],["card_index_dividers","๐"],["carousel_horse","๐ "],["carrot","๐ฅ"],["cat","๐ฑ"],["cat2","๐"],["cd","๐ฟ"],["celebrate","๐"],["chains","โ"],["champagne","๐พ"],["chart","๐น"],["chart_with_downwards_trend","๐"],["chart_with_upwards_trend","๐"],["chat","๐ฌ"],["checkered_flag","๐"],["cheese","๐ง"],["cherries","๐"],["cherry_blossom","๐ธ"],["chess_pawn","โ"],["chestnut","๐ฐ"],["chicken","๐"],["child","๐ง"],["children_crossing","๐ธ"],["chill","๐"],["chilling","๐"],["chipmunk","๐ฟ"],["chocolate_bar","๐ซ"],["chopsticks","๐ฅข"],["christmas_tree","๐"],["church","โช"],["cinema","๐ฆ"],["circus_tent","๐ช"],["city_sunrise","๐"],["city_sunset","๐"],["cityscape","๐"],["cl","๐"],["clamp","๐"],["clap","๐"],["clapper","๐ฌ"],["classical_building","๐"],["climbing_man","๐งโโ๏ธ"],["climbing_woman","๐งโโ๏ธ"],["clinking_glasses","๐ฅ"],["clipboard","๐"],["clock1","๐"],["clock10","๐"],["clock1030","๐ฅ"],["clock11","๐"],["clock1130","๐ฆ"],["clock12","๐"],["clock1230","๐ง"],["clock130","๐"],["clock2","๐"],["clock230","๐"],["clock3","๐"],["clock330","๐"],["clock4","๐"],["clock430","๐"],["clock5","๐"],["clock530","๐ "],["clock6","๐"],["clock630","๐ก"],["clock7","๐"],["clock730","๐ข"],["clock8","๐"],["clock830","๐ฃ"],["clock9","๐"],["clock930","๐ค"],["closed_book","๐"],["closed_lock_with_key","๐"],["closed_umbrella","๐"],["cloud","โ๏ธ"],["cloud_with_lightning","๐ฉ"],["cloud_with_lightning_and_rain","โ"],["cloud_with_rain","๐ง"],["cloud_with_snow","๐จ"],["clown_face","๐คก"],["clubs","โฃ๏ธ"],["coat","๐งฅ"],["cocktail","๐ธ"],["coconut","๐ฅฅ"],["coffee","โ"],["coffin","โฐ"],["cold","๐ฅถ"],["cold_sweat","๐ฐ"],["comet","โ"],["compass","๐งญ"],["computer","๐ป"],["computer_mouse","๐ฑ"],["confetti_ball","๐"],["confounded","๐"],["confused","๐"],["congrats","๐"],["congratulations","ใ๏ธ"],["construction","๐ง"],["construction_worker_man","๐ท"],["construction_worker_woman","๐ทโโ๏ธ"],["control_knobs","๐"],["convenience_store","๐ช"],["cookie","๐ช"],["cool","๐"],["copyright","ยฉ๏ธ"],["corn","๐ฝ"],["correct","โ
"],["couch_and_lamp","๐"],["couple","๐ซ"],["couple_with_heart_man_man","๐จโโค๏ธโ๐จ"],["couple_with_heart_woman_man","๐"],["couple_with_heart_woman_woman","๐ฉโโค๏ธโ๐ฉ"],["couplekiss_man_man","๐จโโค๏ธโ๐โ๐จ"],["couplekiss_man_woman","๐"],["couplekiss_woman_woman","๐ฉโโค๏ธโ๐โ๐ฉ"],["cow","๐ฎ"],["cow2","๐"],["cowboy_hat_face","๐ค "],["crab","๐ฆ"],["crayon","๐"],["credit_card","๐ณ"],["crescent_moon","๐"],["cricket","๐"],["cringe","๐"],["crocodile","๐"],["croissant","๐ฅ"],["crossed_fingers","๐ค"],["crossed_flags","๐"],["crossed_swords","โ"],["crown","๐"],["crush","๐ฅฐ"],["cry","๐ข"],["crying","๐ญ"],["crying_cat_face","๐ฟ"],["crystal_ball","๐ฎ"],["cucumber","๐ฅ"],["cup_with_straw","๐ฅค"],["cupcake","๐ง"],["cupid","๐"],["curling_stone","๐ฅ"],["curly_loop","โฐ"],["currency_exchange","๐ฑ"],["curry","๐"],["custard","๐ฎ"],["customs","๐"],["cya","๐"],["cyclone","๐"]],"d":[["dagger","๐ก"],["dancer","๐"],["dancing_men","๐ฏโโ๏ธ"],["dancing_women","๐ฏ"],["dango","๐ก"],["dark_sunglasses","๐ถ"],["dart","๐ฏ"],["dash","๐จ"],["date","๐
"],["daydream","๐ญ"],["dead","๐"],["deal","๐ค"],["deciduous_tree","๐ณ"],["deer","๐ฆ"],["delicious","๐"],["department_store","๐ฌ"],["derelict_house","๐"],["desert","๐"],["desert_island","๐"],["desktop_computer","๐ฅ"],["diamond_shape_with_a_dot_inside","๐ "],["diamonds","โฆ๏ธ"],["disappointed","๐"],["disappointed_relieved","๐ฅ"],["dislike","๐"],["dizzy","๐ซ"],["dizzy_face","๐ต"],["dna","๐งฌ"],["do_not_litter","๐ฏ"],["dog","๐ถ"],["dog2","๐"],["dollar","๐ต"],["dolls","๐"],["dolphin","๐ฌ"],["door","๐ช"],["doughnut","๐ฉ"],["dove","๐"],["dragon","๐"],["dragon_face","๐ฒ"],["dream","๐ญ"],["dress","๐"],["dromedary_camel","๐ช"],["drooling_face","๐คค"],["droplet","๐ง"],["drum","๐ฅ"],["duck","๐ฆ"],["dumpling","๐ฅ"],["dvd","๐"]],"e":[["e-mail","๐ง"],["eagle","๐ฆ
"],["ear","๐"],["ear_of_rice","๐พ"],["earth_africa","๐"],["earth_americas","๐"],["earth_asia","๐"],["egg","๐ฅ"],["eggplant","๐"],["eight","8๏ธโฃ"],["eight_pointed_black_star","โด๏ธ"],["eight_spoked_asterisk","โณ๏ธ"],["eject_button","โ๏ธ"],["electric_plug","๐"],["elephant","๐"],["email","โ๏ธ"],["end","๐"],["england","๐ด๓ ง๓ ข๓ ฅ๓ ฎ๓ ง๓ ฟ"],["envelope_with_arrow","๐ฉ"],["euro","๐ถ"],["european_castle","๐ฐ"],["european_post_office","๐ค"],["evergreen_tree","๐ฒ"],["ew","๐คฎ"],["exclamation","โ"],["exhausted","๐ฅฑ"],["explode","๐ฅ"],["exploding_head","๐คฏ"],["expressionless","๐"],["eye","๐"],["eyeglasses","๐"],["eyes","๐"]],"f":[["face_with_head_bandage","๐ค"],["face_with_thermometer","๐ค"],["facepalm","๐คฆ"],["facepunch","๐"],["factory","๐ญ"],["fallen_leaf","๐"],["family_man_boy","๐จโ๐ฆ"],["family_man_boy_boy","๐จโ๐ฆโ๐ฆ"],["family_man_girl","๐จโ๐ง"],["family_man_girl_boy","๐จโ๐งโ๐ฆ"],["family_man_girl_girl","๐จโ๐งโ๐ง"],["family_man_man_boy","๐จโ๐จโ๐ฆ"],["family_man_man_boy_boy","๐จโ๐จโ๐ฆโ๐ฆ"],["family_man_man_girl","๐จโ๐จโ๐ง"],["family_man_man_girl_boy","๐จโ๐จโ๐งโ๐ฆ"],["family_man_man_girl_girl","๐จโ๐จโ๐งโ๐ง"],["family_man_woman_boy","๐ช"],["family_man_woman_boy_boy","๐จโ๐ฉโ๐ฆโ๐ฆ"],["family_man_woman_girl","๐จโ๐ฉโ๐ง"],["family_man_woman_girl_boy","๐จโ๐ฉโ๐งโ๐ฆ"],["family_man_woman_girl_girl","๐จโ๐ฉโ๐งโ๐ง"],["family_woman_boy","๐ฉโ๐ฆ"],["family_woman_boy_boy","๐ฉโ๐ฆโ๐ฆ"],["family_woman_girl","๐ฉโ๐ง"],["family_woman_girl_boy","๐ฉโ๐งโ๐ฆ"],["family_woman_girl_girl","๐ฉโ๐งโ๐ง"],["family_woman_woman_boy","๐ฉโ๐ฉโ๐ฆ"],["family_woman_woman_boy_boy","๐ฉโ๐ฉโ๐ฆโ๐ฆ"],["family_woman_woman_girl","๐ฉโ๐ฉโ๐ง"],["family_woman_woman_girl_boy","๐ฉโ๐ฉโ๐งโ๐ฆ"],["family_woman_woman_girl_girl","๐ฉโ๐ฉโ๐งโ๐ง"],["fart","๐จ"],["fast_forward","โฉ"],["fax","๐ "],["fearful","๐จ"],["female_detective","๐ต๏ธโโ๏ธ"],["ferris_wheel","๐ก"],["ferry","โด"],["field_hockey","๐"],["file_cabinet","๐"],["file_folder","๐"],["film_projector","๐ฝ"],["film_strip","๐"],["fingers_crossed","๐ค"],["fire","๐ฅ"],["fire_engine","๐"],["fire_extinguisher","๐งฏ"],["firecracker","๐งจ"],["fireworks","๐"],["first_quarter_moon","๐"],["first_quarter_moon_with_face","๐"],["fish","๐"],["fish_cake","๐ฅ"],["fishing_pole_and_fish","๐ฃ"],["fist","โ"],["fist_left","๐ค"],["fist_right","๐ค"],["fistbump","๐"],["five","5๏ธโฃ"],["flags","๐"],["flashlight","๐ฆ"],["flat_shoe","๐ฅฟ"],["fleek","๐ฏ"],["fleur_de_lis","โ"],["flight_arrival","๐ฌ"],["flight_departure","๐ซ"],["floppy_disk","๐พ"],["flower_playing_cards","๐ด"],["flushed","๐ณ"],["flying_disc","๐ฅ"],["flying_saucer","๐ธ"],["fml","๐ฉ"],["fog","๐ซ"],["foggy","๐"],["foot","๐ฆถ"],["football","๐"],["footprints","๐ฃ"],["fork_and_knife","๐ด"],["fortune_cookie","๐ฅ "],["fountain","โฒ"],["fountain_pen","๐"],["four","4๏ธโฃ"],["four_leaf_clover","๐"],["fox_face","๐ฆ"],["fr","๐ฏ"],["framed_picture","๐ผ"],["free","๐"],["fried_egg","๐ณ"],["fried_shrimp","๐ค"],["fries","๐"],["frog","๐ธ"],["frowning","๐ฆ"],["frowning_face","โน"],["frowning_man","๐โโ๏ธ"],["frowning_woman","๐"],["ftw","๐"],["fu","๐"],["fuelpump","โฝ"],["full_moon","๐"],["full_moon_with_face","๐"],["funeral_urn","โฑ"]],"g":[["game_die","๐ฒ"],["gasp","๐ฎ"],["gear","โ"],["gem","๐"],["gemini","โ"],["germs","๐ท"],["gg","๐"],["ghost","๐ป"],["gift","๐"],["gift_heart","๐"],["giraffe","๐ฆ"],["girl","๐ง"],["gj","๐"],["globe_with_meridians","๐"],["gloves","๐งค"],["gm","โ๏ธ"],["gn","๐ด"],["gnight","๐ด"],["goal_net","๐ฅ
"],["goat","๐"],["goggles","๐ฅฝ"],["golf","โณ"],["golfing_man","๐"],["golfing_woman","๐๏ธโโ๏ธ"],["goodjob","๐"],["goodmorning","โ๏ธ"],["goodnight","๐ด"],["gorilla","๐ฆ"],["gotcha","๐"],["grapes","๐"],["grasshopper","๐ฆ"],["green_apple","๐"],["green_book","๐"],["green_heart","๐"],["green_salad","๐ฅ"],["grey_exclamation","โ"],["grey_question","โ"],["grimacing","๐ฌ"],["grin","๐"],["grinning","๐"],["gtg","๐"],["guardsman","๐"],["guardswoman","๐โโ๏ธ"],["guitar","๐ธ"],["gun","๐ซ"]],"h":[["haha","๐"],["hahaha","๐"],["haircut_man","๐โโ๏ธ"],["haircut_woman","๐"],["hamburger","๐"],["hammer","๐จ"],["hammer_and_pick","โ"],["hammer_and_wrench","๐ "],["hamster","๐น"],["hand_over_mouth","๐คญ"],["handbag","๐"],["handshake","๐ค"],["hash","#๏ธโฃ"],["hatched_chick","๐ฅ"],["hatching_chick","๐ฃ"],["headphones","๐ง"],["hear_no_evil","๐"],["heart","โค๏ธ"],["heart_decoration","๐"],["heart_eyes","๐"],["heart_eyes_cat","๐ป"],["heartbeat","๐"],["heartpulse","๐"],["hearts","โฅ๏ธ"],["heavy_check_mark","โ๏ธ"],["heavy_division_sign","โ"],["heavy_dollar_sign","๐ฒ"],["heavy_heart_exclamation","โฃ"],["heavy_minus_sign","โ"],["heavy_multiplication_x","โ๏ธ"],["heavy_plus_sign","โ"],["hedgehog","๐ฆ"],["helicopter","๐"],["hello","๐"],["herb","๐ฟ"],["hi","๐"],["hibiscus","๐บ"],["high_brightness","๐"],["high_heel","๐ "],["highfive","๐"],["hiking_boot","๐ฅพ"],["hippopotamus","๐ฆ"],["hmm","๐ค"],["hocho","๐ช"],["hole","๐ณ"],["honey_pot","๐ฏ"],["honeybee","๐"],["hooray","๐"],["horse","๐ด"],["horse_racing","๐"],["hospital","๐ฅ"],["hot","๐ฅต"],["hot_pepper","๐ถ"],["hotdog","๐ญ"],["hotel","๐จ"],["hotsprings","โจ๏ธ"],["hourglass","โ"],["hourglass_flowing_sand","โณ"],["house","๐ "],["house_with_garden","๐ก"],["houses","๐"],["hug","๐ค"],["hugs","๐ค"],["huh","๐คจ"],["hushed","๐ฏ"]],"i":[["ice_cream","๐จ"],["ice_hockey","๐"],["ice_skate","โธ"],["icecream","๐ฆ"],["id","๐"],["ideograph_advantage","๐"],["idk","๐คท"],["ill","๐ค"],["ily","โค๏ธ"],["imp","๐ฟ"],["inbox_tray","๐ฅ"],["incoming_envelope","๐จ"],["infinity","โพ"],["information_source","โน๏ธ"],["innocent","๐"],["interrobang","โ๏ธ"],["intoxicated","๐ฅด"],["iphone","๐ฑ"],["izakaya_lantern","๐ฎ"]],"j":[["jack_o_lantern","๐"],["japan","๐พ"],["japanese_castle","๐ฏ"],["japanese_goblin","๐บ"],["japanese_ogre","๐น"],["jealous","๐"],["jeans","๐"],["jelly","๐"],["jigsaw","๐งฉ"],["joke","๐"],["joy","๐"],["joy_cat","๐น"],["joystick","๐น"]],"k":[["kaaba","๐"],["kangaroo","๐ฆ"],["key","๐"],["keyboard","โจ"],["keycap_ten","๐"],["kick_scooter","๐ด"],["kimono","๐"],["kiss","๐"],["kissing","๐"],["kissing_cat","๐ฝ"],["kissing_closed_eyes","๐"],["kissing_heart","๐"],["kissing_smiling_eyes","๐"],["kiwi_fruit","๐ฅ"],["knockedout","๐ต"],["koala","๐จ"],["koko","๐"]],"l":[["labcoat","๐ฅผ"],["label","๐ท"],["lacrosse","๐ฅ"],["large_blue_circle","๐ต"],["large_blue_diamond","๐ท"],["large_orange_diamond","๐ถ"],["last_quarter_moon","๐"],["last_quarter_moon_with_face","๐"],["later","๐"],["latin_cross","โ"],["laughing","๐"],["leafy_greens","๐ฅฌ"],["leaves","๐"],["ledger","๐"],["left_luggage","๐
"],["left_right_arrow","โ๏ธ"],["left_speech_bubble","๐จ"],["leftwards_arrow_with_hook","โฉ๏ธ"],["leg","๐ฆต"],["legit","๐"],["lemon","๐"],["leo","โ"],["leopard","๐"],["level_slider","๐"],["libra","โ"],["light_rail","๐"],["link","๐"],["lion","๐ฆ"],["lips","๐"],["lipstick","๐"],["lizard","๐ฆ"],["llama","๐ฆ"],["lmao","๐"],["lmfao","๐คฃ"],["lobster","๐ฆ"],["lock","๐"],["lock_with_ink_pen","๐"],["lol","๐"],["lollipop","๐ญ"],["looking","๐"],["loop","โฟ"],["lotion_bottle","๐งด"],["loud_sound","๐"],["loudspeaker","๐ข"],["love","โค๏ธ"],["love_hotel","๐ฉ"],["love_letter","๐"],["love_you","๐ค"],["low_brightness","๐
"],["luggage","๐งณ"],["lying_face","๐คฅ"]],"m":[["m","โ๏ธ"],["mad","๐ก"],["mag","๐"],["mag_right","๐"],["magnet","๐งฒ"],["mahjong","๐"],["mailbox","๐ซ"],["mailbox_closed","๐ช"],["mailbox_with_mail","๐ฌ"],["mailbox_with_no_mail","๐ญ"],["male_detective","๐ต"],["man","๐จ"],["man_artist","๐จโ๐จ"],["man_astronaut","๐จโ๐"],["man_cartwheeling","๐คธโโ๏ธ"],["man_cook","๐จโ๐ณ"],["man_dancing","๐บ"],["man_elf","๐งโโ๏ธ"],["man_facepalming","๐คฆโโ๏ธ"],["man_factory_worker","๐จโ๐ญ"],["man_fairy","๐งโโ๏ธ"],["man_farmer","๐จโ๐พ"],["man_firefighter","๐จโ๐"],["man_genie","๐งโโ๏ธ"],["man_health_worker","๐จโโ๏ธ"],["man_in_lotus_position","๐งโโ๏ธ"],["man_in_steamy_room","๐งโโ๏ธ"],["man_in_tuxedo","๐คต"],["man_judge","๐จโโ๏ธ"],["man_juggling","๐คนโโ๏ธ"],["man_mechanic","๐จโ๐ง"],["man_office_worker","๐จโ๐ผ"],["man_pilot","๐จโโ๏ธ"],["man_playing_handball","๐คพโโ๏ธ"],["man_playing_water_polo","๐คฝโโ๏ธ"],["man_scientist","๐จโ๐ฌ"],["man_shrugging","๐คทโโ๏ธ"],["man_singer","๐จโ๐ค"],["man_student","๐จโ๐"],["man_superhero","๐ฆธโโ๏ธ"],["man_supervillain","๐ฆนโโ๏ธ"],["man_teacher","๐จโ๐ซ"],["man_technologist","๐จโ๐ป"],["man_vampire","๐งโโ๏ธ"],["man_with_gua_pi_mao","๐ฒ"],["man_with_turban","๐ณ"],["man_zombie","๐งโโ๏ธ"],["mango","๐ฅญ"],["mans_shoe","๐"],["mantelpiece_clock","๐ฐ"],["maple_leaf","๐"],["martial_arts_uniform","๐ฅ"],["mask","๐ท"],["massage_man","๐โโ๏ธ"],["massage_woman","๐"],["meat_on_bone","๐"],["medal_military","๐"],["medal_sports","๐
"],["mega","๐ฃ"],["meh","๐"],["melon","๐"],["memo","๐"],["men_wrestling","๐คผโโ๏ธ"],["menorah","๐"],["mens","๐น"],["mermaid","๐งโโ๏ธ"],["merman","๐งโโ๏ธ"],["metal","๐ค"],["metro","๐"],["microbe","๐ฆ "],["microphone","๐ค"],["microscope","๐ฌ"],["milk_glass","๐ฅ"],["milky_way","๐"],["mindblown","๐คฏ"],["minibus","๐"],["minidisc","๐ฝ"],["mobile_phone_off","๐ด"],["money_mouth_face","๐ค"],["money_with_wings","๐ธ"],["moneybag","๐ฐ"],["monkey","๐"],["monkey_face","๐ต"],["monocle","๐ง"],["monorail","๐"],["moon_cake","๐ฅฎ"],["morning","โ๏ธ"],["mortar_board","๐"],["mosque","๐"],["mosquito","๐ฆ"],["motor_boat","๐ฅ"],["motor_scooter","๐ต"],["motorcycle","๐"],["motorway","๐ฃ"],["mount_fuji","๐ป"],["mountain","โฐ"],["mountain_biking_man","๐ต"],["mountain_biking_woman","๐ตโโ๏ธ"],["mountain_cableway","๐ "],["mountain_railway","๐"],["mountain_snow","๐"],["mouse","๐ญ"],["mouse2","๐"],["movie_camera","๐ฅ"],["moyai","๐ฟ"],["mrs_claus","๐คถ"],["muah","๐"],["muscle","๐ช"],["mushroom","๐"],["musical_keyboard","๐น"],["musical_note","๐ต"],["musical_score","๐ผ"],["mute","๐"]],"n":[["nah","๐"],["nail_care","๐
"],["name_badge","๐"],["nap","๐ด"],["national_park","๐"],["nauseated_face","๐คข"],["nazar_amulet","๐งฟ"],["necktie","๐"],["negative_squared_cross_mark","โ"],["nerd_face","๐ค"],["nervous","๐
"],["neutral_face","๐"],["new","๐"],["new_moon","๐"],["new_moon_with_face","๐"],["newspaper","๐ฐ"],["newspaper_roll","๐"],["next_track_button","โญ"],["ng","๐"],["night_with_stars","๐"],["nighty","๐ด"],["nine","9๏ธโฃ"],["no_bell","๐"],["no_bicycles","๐ณ"],["no_entry","โ"],["no_entry_sign","๐ซ"],["no_good_man","๐
โโ๏ธ"],["no_good_woman","๐
"],["no_mobile_phones","๐ต"],["no_mouth","๐ถ"],["no_pedestrians","๐ท"],["no_smoking","๐ญ"],["non-potable_water","๐ฑ"],["nope","๐"],["noped","๐"],["nose","๐"],["notebook","๐"],["notebook_with_decorative_cover","๐"],["noted","๐"],["notes","๐ถ"],["nut_and_bolt","๐ฉ"],["nvm","๐คท"]],"o":[["o","โญ"],["o2","๐
พ๏ธ"],["ocean","๐"],["octopus","๐"],["oden","๐ข"],["office","๐ข"],["oil_drum","๐ข"],["ok","๐"],["ok_hand","๐"],["ok_man","๐โโ๏ธ"],["ok_woman","๐"],["old_key","๐"],["older_adult","๐ง"],["older_man","๐ด"],["older_woman","๐ต"],["om","๐"],["omg","๐ฑ"],["on","๐"],["oncoming_automobile","๐"],["oncoming_bus","๐"],["oncoming_police_car","๐"],["oncoming_taxi","๐"],["one","1๏ธโฃ"],["oof","๐ฌ"],["oops","๐ฌ"],["open_book","๐"],["open_file_folder","๐"],["open_hands","๐"],["open_mouth","๐ฎ"],["open_umbrella","โ"],["ophiuchus","โ"],["orange_book","๐"],["orange_heart","๐งก"],["orthodox_cross","โฆ"],["ouch","๐ค"],["outbox_tray","๐ค"],["owl","๐ฆ"],["ox","๐"]],"p":[["package","๐ฆ"],["page_facing_up","๐"],["page_with_curl","๐"],["pager","๐"],["paintbrush","๐"],["palm_tree","๐ด"],["palms_up","๐คฒ"],["pancakes","๐ฅ"],["panda_face","๐ผ"],["paperclip","๐"],["paperclips","๐"],["parasol_on_ground","โฑ"],["parking","๐
ฟ๏ธ"],["parrot","๐ฆ"],["part_alternation_mark","ใฝ๏ธ"],["partly_sunny","โ
"],["party","๐ฅณ"],["partying","๐ฅณ"],["passenger_ship","๐ณ"],["passport_control","๐"],["pause_button","โธ"],["paw_prints","๐พ"],["peace","โ"],["peace_symbol","โฎ"],["peach","๐"],["peacock","๐ฆ"],["peanuts","๐ฅ"],["pear","๐"],["peep","๐"],["pen","๐"],["pencil2","โ๏ธ"],["penguin","๐ง"],["pensive","๐"],["performing_arts","๐ญ"],["persevere","๐ฃ"],["person_fencing","๐คบ"],["petri_dish","๐งซ"],["phone","โ๏ธ"],["pick","โ"],["pie","๐ฅง"],["pig","๐ท"],["pig2","๐"],["pig_nose","๐ฝ"],["pill","๐"],["pineapple","๐"],["ping_pong","๐"],["pirate_flag","๐ดโโ ๏ธ"],["pisces","โ"],["pissed","๐คฌ"],["pizza","๐"],["place_of_worship","๐"],["plate_with_cutlery","๐ฝ"],["play_or_pause_button","โฏ"],["pleading","๐ฅบ"],["pls","๐"],["plz","๐"],["point_down","๐"],["point_left","๐"],["point_right","๐"],["point_up","โ"],["point_up_2","๐"],["police_car","๐"],["policeman","๐ฎ"],["policewoman","๐ฎโโ๏ธ"],["poodle","๐ฉ"],["poop","๐ฉ"],["popcorn","๐ฟ"],["post_office","๐ฃ"],["postal_horn","๐ฏ"],["postbox","๐ฎ"],["potable_water","๐ฐ"],["potato","๐ฅ"],["pouch","๐"],["poultry_leg","๐"],["pound","๐ท"],["pouting_cat","๐พ"],["pouting_man","๐โโ๏ธ"],["pouting_woman","๐"],["praise","๐"],["pray","๐"],["prayer_beads","๐ฟ"],["pregnant_woman","๐คฐ"],["pretzel","๐ฅจ"],["previous_track_button","โฎ"],["prince","๐คด"],["princess","๐ธ"],["printer","๐จ"],["puke","๐คฎ"],["punch","๐"],["purple_heart","๐"],["purse","๐"],["pushpin","๐"],["put_litter_in_its_place","๐ฎ"]],"q":[["question","โ"]],"r":[["rabbit","๐ฐ"],["rabbit2","๐"],["raccoon","๐ฆ"],["racehorse","๐"],["racing_car","๐"],["rad","๐"],["radio","๐ป"],["radio_button","๐"],["radioactive","โข"],["rage","๐ก"],["railway_car","๐"],["railway_track","๐ค"],["rainbow","๐"],["rainbow_flag","๐ณ๏ธโ๐"],["raised_back_of_hand","๐ค"],["raised_eyebrow","๐คจ"],["raised_hand","โ"],["raised_hand_with_fingers_splayed","๐"],["raised_hands","๐"],["raising_hand_man","๐โโ๏ธ"],["raising_hand_woman","๐"],["ram","๐"],["ramen","๐"],["rat","๐"],["receipt","๐งพ"],["record_button","โบ"],["recycle","โป๏ธ"],["red_car","๐"],["red_circle","๐ด"],["red_envelope","๐งง"],["registered","ยฎ๏ธ"],["relaxed","โบ๏ธ"],["relieved","๐"],["reminder_ribbon","๐"],["repeat","๐"],["repeat_one","๐"],["rescue_worker_helmet","โ"],["restroom","๐ป"],["revolving_hearts","๐"],["rewind","โช"],["rhinoceros","๐ฆ"],["ribbon","๐"],["rice","๐"],["rice_ball","๐"],["rice_cracker","๐"],["rice_scene","๐"],["right_anger_bubble","๐ฏ"],["ring","๐"],["rip","โฐ๏ธ"],["robot","๐ค"],["rocket","๐"],["rockon","๐ค"],["rofl","๐คฃ"],["roll_eyes","๐"],["roller_coaster","๐ข"],["rooster","๐"],["rose","๐น"],["rosette","๐ต"],["rotating_light","๐จ"],["round_pushpin","๐"],["rowing_man","๐ฃ"],["rowing_woman","๐ฃโโ๏ธ"],["rugby_football","๐"],["running_man","๐"],["running_shirt_with_sash","๐ฝ"],["running_woman","๐โโ๏ธ"]],"s":[["sa","๐๏ธ"],["safety_pin","๐งท"],["sagittarius","โ"],["sailboat","โต"],["sake","๐ถ"],["salt","๐ง"],["sandal","๐ก"],["sandwich","๐ฅช"],["santa","๐
"],["satellite","๐ก"],["sauropod","๐ฆ"],["saxophone","๐ท"],["scared","๐จ"],["scarf","๐งฃ"],["school","๐ซ"],["school_satchel","๐"],["scissors","โ๏ธ"],["scorpion","๐ฆ"],["scorpius","โ"],["scotland","๐ด๓ ง๓ ข๓ ณ๓ ฃ๓ ด๓ ฟ"],["scream","๐ฑ"],["scream_cat","๐"],["scroll","๐"],["seat","๐บ"],["secret","ใ๏ธ"],["see_no_evil","๐"],["seedling","๐ฑ"],["selfie","๐คณ"],["seven","7๏ธโฃ"],["shallow_pan_of_food","๐ฅ"],["shamrock","โ"],["shark","๐ฆ"],["shaved_ice","๐ง"],["sheep","๐"],["shell","๐"],["shh","๐คซ"],["shield","๐ก"],["shinto_shrine","โฉ"],["ship","๐ข"],["shocked","๐ฑ"],["shopping","๐"],["shopping_cart","๐"],["shower","๐ฟ"],["shrimp","๐ฆ"],["shrug","๐คท"],["shushing","๐คซ"],["shut","๐ค"],["sick","๐ค"],["signal_strength","๐ถ"],["silly","๐"],["six","6๏ธโฃ"],["six_pointed_star","๐ฏ"],["skateboard","๐น"],["ski","๐ฟ"],["skier","โท"],["skull","๐"],["skull_and_crossbones","โ "],["slay","๐"],["sled","๐ท"],["sleep","๐ค"],["sleeping","๐ด"],["sleeping_bed","๐"],["sleepy","๐ช"],["slightly_frowning_face","๐"],["slightly_smiling_face","๐"],["slot_machine","๐ฐ"],["small_airplane","๐ฉ"],["small_blue_diamond","๐น"],["small_orange_diamond","๐ธ"],["small_red_triangle","๐บ"],["small_red_triangle_down","๐ป"],["smh","๐คฆ"],["smile","๐"],["smile_cat","๐ธ"],["smiley","๐"],["smiley_cat","๐บ"],["smiling_face_with_three_hearts","๐ฅฐ"],["smiling_imp","๐"],["smirk","๐"],["smirk_cat","๐ผ"],["smoking","๐ฌ"],["snail","๐"],["snake","๐"],["sneezing_face","๐คง"],["snooze","๐ค"],["snowboarder","๐"],["snowflake","โ๏ธ"],["snowman","โ"],["snowman_with_snow","โ"],["soap","๐งผ"],["sob","๐ญ"],["soccer","โฝ"],["socks","๐งฆ"],["softball","๐ฅ"],["soon","๐"],["sorceress","๐งโโ๏ธ"],["sos","๐"],["sound","๐"],["space_invader","๐พ"],["spades","โ ๏ธ"],["spaghetti","๐"],["sparkle","โ๏ธ"],["sparkler","๐"],["sparkles","โจ"],["sparkling_heart","๐"],["speak_no_evil","๐"],["speaker","๐"],["speaking_head","๐ฃ"],["speech_balloon","๐ฌ"],["speechless","๐ถ"],["speedboat","๐ค"],["spider","๐ท"],["spider_web","๐ธ"],["spiral_calendar","๐"],["spiral_notepad","๐"],["sponge","๐งฝ"],["spoon","๐ฅ"],["squid","๐ฆ"],["stadium","๐"],["star","โญ"],["star2","๐"],["star_and_crescent","โช"],["star_of_david","โก"],["star_struck","๐คฉ"],["stars","๐ "],["station","๐"],["statue_of_liberty","๐ฝ"],["steak","๐ฅฉ"],["steam_locomotive","๐"],["stew","๐ฒ"],["stop_button","โน"],["stop_sign","๐"],["stopwatch","โฑ"],["straight_ruler","๐"],["strawberry","๐"],["stuck_out_tongue","๐"],["stuck_out_tongue_closed_eyes","๐"],["stuck_out_tongue_winking_eye","๐"],["studio_microphone","๐"],["stuffed_flatbread","๐ฅ"],["sun_behind_large_cloud","๐ฅ"],["sun_behind_rain_cloud","๐ฆ"],["sun_behind_small_cloud","๐ค"],["sun_with_face","๐"],["sunflower","๐ป"],["sunglasses","๐"],["sunny","โ๏ธ"],["sunrise","๐
"],["sunrise_over_mountains","๐"],["surfing_man","๐"],["surfing_woman","๐โโ๏ธ"],["sus","๐คจ"],["sushi","๐ฃ"],["suspension_railway","๐"],["swag","๐"],["swan","๐ฆข"],["sweat","๐"],["sweat_drops","๐ฆ"],["sweat_smile","๐
"],["sweet_potato","๐ "],["swimming_man","๐"],["swimming_woman","๐โโ๏ธ"],["symbols","๐ฃ"],["symbols_over_mouth","๐คฌ"],["synagogue","๐"],["syringe","๐"]],"t":[["t-rex","๐ฆ"],["taco","๐ฎ"],["tada","๐"],["takeout_box","๐ฅก"],["tanabata_tree","๐"],["tangerine","๐"],["tasty","๐"],["taurus","โ"],["taxi","๐"],["tea","๐ต"],["teddy_bear","๐งธ"],["telephone_receiver","๐"],["telescope","๐ญ"],["tennis","๐พ"],["tent","โบ"],["test_tube","๐งช"],["text","๐ฌ"],["thanks","๐"],["thermometer","๐ก"],["think","๐ญ"],["thinking","๐ค"],["thought_balloon","๐ญ"],["thread","๐งต"],["three","3๏ธโฃ"],["thumbsdown","๐"],["thumbsup","๐"],["thx","๐"],["ticket","๐ซ"],["tickets","๐"],["tiger","๐ฏ"],["tiger2","๐
"],["timer_clock","โฒ"],["tipping_hand_man","๐โโ๏ธ"],["tipping_hand_woman","๐"],["tipsy","๐ฅด"],["tired","๐ด"],["tired_face","๐ซ"],["tm","โข๏ธ"],["toilet","๐ฝ"],["toilet_paper","๐งป"],["tokyo_tower","๐ผ"],["tomato","๐
"],["tongue","๐
"],["toolbox","๐งฐ"],["tooth","๐ฆท"],["top","๐"],["tophat","๐ฉ"],["tornado","๐ช"],["trackball","๐ฒ"],["tractor","๐"],["traffic_light","๐ฅ"],["train","๐"],["train2","๐"],["tram","๐"],["triangular_flag_on_post","๐ฉ"],["triangular_ruler","๐"],["trident","๐ฑ"],["triumph","๐ค"],["trolleybus","๐"],["trophy","๐"],["tropical_drink","๐น"],["tropical_fish","๐ "],["truck","๐"],["trumpet","๐บ"],["tshirt","๐"],["ttyl","๐"],["tulip","๐ท"],["tumbler_glass","๐ฅ"],["turkey","๐ฆ"],["turtle","๐ข"],["tv","๐บ"],["twisted_rightwards_arrows","๐"],["two","2๏ธโฃ"],["two_hearts","๐"],["two_men_holding_hands","๐ฌ"],["two_women_holding_hands","๐ญ"],["ty","๐"],["typing","๐ฌ"]],"u":[["u5272","๐น"],["u5408","๐ด"],["u55b6","๐บ"],["u6307","๐ฏ"],["u6708","๐ท๏ธ"],["u6709","๐ถ"],["u6e80","๐ต"],["u7121","๐"],["u7533","๐ธ"],["u7981","๐ฒ"],["u7a7a","๐ณ"],["ugh","๐"],["umbrella","โ"],["unamused","๐"],["underage","๐"],["unicorn","๐ฆ"],["unlock","๐"],["up","๐"],["upside_down_face","๐"]],"v":[["v","โ"],["vertical_traffic_light","๐ฆ"],["vhs","๐ผ"],["vibration_mode","๐ณ"],["video_camera","๐น"],["video_game","๐ฎ"],["violin","๐ป"],["virgo","โ"],["volcano","๐"],["volleyball","๐"],["vomiting","๐คฎ"],["vs","๐"],["vulcan_salute","๐"]],"w":[["wales","๐ด๓ ง๓ ข๓ ท๓ ฌ๓ ณ๓ ฟ"],["walking_man","๐ถ"],["walking_woman","๐ถโโ๏ธ"],["waning_crescent_moon","๐"],["waning_gibbous_moon","๐"],["warning","โ ๏ธ"],["wastebasket","๐"],["watch","โ"],["water_buffalo","๐"],["watermelon","๐"],["wave","๐"],["wavy_dash","ใฐ๏ธ"],["waxing_crescent_moon","๐"],["waxing_gibbous_moon","๐"],["wc","๐พ"],["weary","๐ฉ"],["wedding","๐"],["weight_lifting_man","๐"],["weight_lifting_woman","๐๏ธโโ๏ธ"],["weirdo","๐"],["whale","๐ณ"],["whale2","๐"],["whatever","๐"],["wheel_of_dharma","โธ"],["wheelchair","โฟ"],["white_check_mark","โ
"],["white_circle","โช"],["white_flag","๐ณ"],["white_flower","๐ฎ"],["white_large_square","โฌ"],["white_medium_small_square","โฝ"],["white_medium_square","โป๏ธ"],["white_small_square","โซ๏ธ"],["white_square_button","๐ณ"],["whoa","๐ฏ"],["wilted_flower","๐ฅ"],["wind_chime","๐"],["wind_face","๐ฌ"],["wine_glass","๐ท"],["wink","๐"],["wizard","๐งโโ๏ธ"],["woah","๐ฑ"],["wolf","๐บ"],["woman","๐ฉ"],["woman_artist","๐ฉโ๐จ"],["woman_astronaut","๐ฉโ๐"],["woman_cartwheeling","๐คธโโ๏ธ"],["woman_cook","๐ฉโ๐ณ"],["woman_elf","๐งโโ๏ธ"],["woman_facepalming","๐คฆโโ๏ธ"],["woman_factory_worker","๐ฉโ๐ญ"],["woman_fairy","๐งโโ๏ธ"],["woman_farmer","๐ฉโ๐พ"],["woman_firefighter","๐ฉโ๐"],["woman_genie","๐งโโ๏ธ"],["woman_health_worker","๐ฉโโ๏ธ"],["woman_in_lotus_position","๐งโโ๏ธ"],["woman_in_steamy_room","๐งโโ๏ธ"],["woman_judge","๐ฉโโ๏ธ"],["woman_juggling","๐คนโโ๏ธ"],["woman_mechanic","๐ฉโ๐ง"],["woman_office_worker","๐ฉโ๐ผ"],["woman_pilot","๐ฉโโ๏ธ"],["woman_playing_handball","๐คพโโ๏ธ"],["woman_playing_water_polo","๐คฝโโ๏ธ"],["woman_scientist","๐ฉโ๐ฌ"],["woman_shrugging","๐คท"],["woman_singer","๐ฉโ๐ค"],["woman_student","๐ฉโ๐"],["woman_superhero","๐ฆธโโ๏ธ"],["woman_supervillain","๐ฆนโโ๏ธ"],["woman_teacher","๐ฉโ๐ซ"],["woman_technologist","๐ฉโ๐ป"],["woman_vampire","๐งโโ๏ธ"],["woman_with_headscarf","๐ง"],["woman_with_turban","๐ณโโ๏ธ"],["woman_zombie","๐งโโ๏ธ"],["womans_clothes","๐"],["womans_hat","๐"],["women_wrestling","๐คผโโ๏ธ"],["womens","๐บ"],["woozy","๐ฅด"],["world_map","๐บ"],["worried","๐"],["wrench","๐ง"],["writing_hand","โ"],["wtf","๐คฌ"]],"x":[["x","โ"],["xo","๐"],["xoxo","๐"]],"y":[["yarn","๐งถ"],["yawn","๐ช"],["yay","๐"],["yellow_heart","๐"],["yen","๐ด"],["yep","๐"],["yin_yang","โฏ"],["yo","๐"],["yum","๐"],["yummy","๐"],["yup","๐"]],"z":[["zany","๐คช"],["zap","โก"],["zebra","๐ฆ"],["zero","0๏ธโฃ"],["zipper_mouth_face","๐ค"],["zzz","๐ค"]]}
|