@vsuryav/agent-sim 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +25 -0
- package/bin/agent-sim.js +25 -0
- package/package.json +72 -0
- package/src/app-paths.ts +29 -0
- package/src/app-sync.test.ts +75 -0
- package/src/app-sync.ts +110 -0
- package/src/cli.ts +129 -0
- package/src/collector/claude-code.test.ts +102 -0
- package/src/collector/claude-code.ts +133 -0
- package/src/collector/codex-cli.test.ts +116 -0
- package/src/collector/codex-cli.ts +149 -0
- package/src/collector/db.test.ts +59 -0
- package/src/collector/db.ts +125 -0
- package/src/collector/names.test.ts +21 -0
- package/src/collector/names.ts +28 -0
- package/src/collector/personality.test.ts +40 -0
- package/src/collector/personality.ts +46 -0
- package/src/collector/remote-sync.test.ts +31 -0
- package/src/collector/remote-sync.ts +171 -0
- package/src/collector/sync.test.ts +67 -0
- package/src/collector/sync.ts +148 -0
- package/src/collector/types.ts +1 -0
- package/src/engine/bootstrap/state.ts +3 -0
- package/src/engine/buddy/CompanionSprite.tsx +371 -0
- package/src/engine/buddy/companion.ts +133 -0
- package/src/engine/buddy/prompt.ts +36 -0
- package/src/engine/buddy/sprites.ts +514 -0
- package/src/engine/buddy/types.ts +148 -0
- package/src/engine/buddy/useBuddyNotification.tsx +98 -0
- package/src/engine/ink/Ansi.tsx +292 -0
- package/src/engine/ink/bidi.ts +139 -0
- package/src/engine/ink/clearTerminal.ts +74 -0
- package/src/engine/ink/colorize.ts +231 -0
- package/src/engine/ink/components/AlternateScreen.tsx +80 -0
- package/src/engine/ink/components/App.tsx +658 -0
- package/src/engine/ink/components/AppContext.ts +21 -0
- package/src/engine/ink/components/Box.tsx +214 -0
- package/src/engine/ink/components/Button.tsx +192 -0
- package/src/engine/ink/components/ClockContext.tsx +112 -0
- package/src/engine/ink/components/CursorDeclarationContext.ts +32 -0
- package/src/engine/ink/components/ErrorOverview.tsx +109 -0
- package/src/engine/ink/components/Link.tsx +42 -0
- package/src/engine/ink/components/Newline.tsx +39 -0
- package/src/engine/ink/components/NoSelect.tsx +68 -0
- package/src/engine/ink/components/RawAnsi.tsx +57 -0
- package/src/engine/ink/components/ScrollBox.tsx +237 -0
- package/src/engine/ink/components/Spacer.tsx +20 -0
- package/src/engine/ink/components/StdinContext.ts +49 -0
- package/src/engine/ink/components/TerminalFocusContext.tsx +52 -0
- package/src/engine/ink/components/TerminalSizeContext.tsx +7 -0
- package/src/engine/ink/components/Text.tsx +254 -0
- package/src/engine/ink/constants.ts +2 -0
- package/src/engine/ink/dom.ts +484 -0
- package/src/engine/ink/events/click-event.ts +38 -0
- package/src/engine/ink/events/dispatcher.ts +233 -0
- package/src/engine/ink/events/emitter.ts +39 -0
- package/src/engine/ink/events/event-handlers.ts +73 -0
- package/src/engine/ink/events/event.ts +11 -0
- package/src/engine/ink/events/focus-event.ts +21 -0
- package/src/engine/ink/events/input-event.ts +205 -0
- package/src/engine/ink/events/keyboard-event.ts +51 -0
- package/src/engine/ink/events/terminal-event.ts +107 -0
- package/src/engine/ink/events/terminal-focus-event.ts +19 -0
- package/src/engine/ink/focus.ts +181 -0
- package/src/engine/ink/frame.ts +124 -0
- package/src/engine/ink/get-max-width.ts +27 -0
- package/src/engine/ink/global.d.ts +18 -0
- package/src/engine/ink/hit-test.ts +130 -0
- package/src/engine/ink/hooks/use-animation-frame.ts +57 -0
- package/src/engine/ink/hooks/use-app.ts +8 -0
- package/src/engine/ink/hooks/use-declared-cursor.ts +73 -0
- package/src/engine/ink/hooks/use-input.ts +92 -0
- package/src/engine/ink/hooks/use-interval.ts +67 -0
- package/src/engine/ink/hooks/use-search-highlight.ts +53 -0
- package/src/engine/ink/hooks/use-selection.ts +104 -0
- package/src/engine/ink/hooks/use-stdin.ts +8 -0
- package/src/engine/ink/hooks/use-tab-status.ts +72 -0
- package/src/engine/ink/hooks/use-terminal-focus.ts +16 -0
- package/src/engine/ink/hooks/use-terminal-title.ts +31 -0
- package/src/engine/ink/hooks/use-terminal-viewport.ts +96 -0
- package/src/engine/ink/ink.tsx +1723 -0
- package/src/engine/ink/instances.ts +10 -0
- package/src/engine/ink/layout/engine.ts +6 -0
- package/src/engine/ink/layout/geometry.ts +97 -0
- package/src/engine/ink/layout/node.ts +152 -0
- package/src/engine/ink/layout/yoga.ts +308 -0
- package/src/engine/ink/line-width-cache.ts +24 -0
- package/src/engine/ink/log-update.ts +773 -0
- package/src/engine/ink/measure-element.ts +23 -0
- package/src/engine/ink/measure-text.ts +47 -0
- package/src/engine/ink/node-cache.ts +54 -0
- package/src/engine/ink/optimizer.ts +93 -0
- package/src/engine/ink/output.ts +797 -0
- package/src/engine/ink/parse-keypress.ts +801 -0
- package/src/engine/ink/reconciler.ts +512 -0
- package/src/engine/ink/render-border.ts +231 -0
- package/src/engine/ink/render-node-to-output.ts +1462 -0
- package/src/engine/ink/render-to-screen.ts +231 -0
- package/src/engine/ink/renderer.ts +178 -0
- package/src/engine/ink/root.ts +184 -0
- package/src/engine/ink/screen.ts +1486 -0
- package/src/engine/ink/searchHighlight.ts +93 -0
- package/src/engine/ink/selection.ts +917 -0
- package/src/engine/ink/squash-text-nodes.ts +92 -0
- package/src/engine/ink/stringWidth.ts +222 -0
- package/src/engine/ink/styles.ts +771 -0
- package/src/engine/ink/supports-hyperlinks.ts +57 -0
- package/src/engine/ink/tabstops.ts +46 -0
- package/src/engine/ink/terminal-focus-state.ts +47 -0
- package/src/engine/ink/terminal-querier.ts +212 -0
- package/src/engine/ink/terminal.ts +248 -0
- package/src/engine/ink/termio/ansi.ts +75 -0
- package/src/engine/ink/termio/csi.ts +319 -0
- package/src/engine/ink/termio/dec.ts +60 -0
- package/src/engine/ink/termio/esc.ts +67 -0
- package/src/engine/ink/termio/osc.ts +493 -0
- package/src/engine/ink/termio/parser.ts +394 -0
- package/src/engine/ink/termio/sgr.ts +308 -0
- package/src/engine/ink/termio/tokenize.ts +319 -0
- package/src/engine/ink/termio/types.ts +236 -0
- package/src/engine/ink/useTerminalNotification.ts +126 -0
- package/src/engine/ink/warn.ts +9 -0
- package/src/engine/ink/widest-line.ts +19 -0
- package/src/engine/ink/wrap-text.ts +74 -0
- package/src/engine/ink/wrapAnsi.ts +20 -0
- package/src/engine/native-ts/yoga-layout/enums.ts +134 -0
- package/src/engine/native-ts/yoga-layout/index.ts +2578 -0
- package/src/engine/stubs/bootstrap-state.ts +4 -0
- package/src/engine/stubs/debug.ts +6 -0
- package/src/engine/stubs/log.ts +4 -0
- package/src/engine/utils/debug.ts +5 -0
- package/src/engine/utils/earlyInput.ts +4 -0
- package/src/engine/utils/env.ts +15 -0
- package/src/engine/utils/envUtils.ts +4 -0
- package/src/engine/utils/execFileNoThrow.ts +24 -0
- package/src/engine/utils/fullscreen.ts +4 -0
- package/src/engine/utils/intl.ts +9 -0
- package/src/engine/utils/log.ts +3 -0
- package/src/engine/utils/semver.ts +13 -0
- package/src/engine/utils/sliceAnsi.ts +10 -0
- package/src/engine/utils/theme.ts +17 -0
- package/src/game/App.tsx +141 -0
- package/src/game/agents/behavior.ts +249 -0
- package/src/game/agents/speech.ts +57 -0
- package/src/game/canvas.ts +98 -0
- package/src/game/launch.ts +36 -0
- package/src/game/ship/ShipView.tsx +145 -0
- package/src/game/ship/ship-map.ts +172 -0
- package/src/game/ui/AgentBio.tsx +72 -0
- package/src/game/ui/HUD.tsx +63 -0
- package/src/game/ui/StatusBar.tsx +49 -0
- package/src/game/useKeyboard.ts +62 -0
- package/src/main.tsx +22 -0
- package/src/run-interactive.ts +74 -0
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import {
|
|
2
|
+
CellWidth,
|
|
3
|
+
cellAtIndex,
|
|
4
|
+
type Screen,
|
|
5
|
+
type StylePool,
|
|
6
|
+
setCellStyleId,
|
|
7
|
+
} from './screen.js'
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Highlight all visible occurrences of `query` in the screen buffer by
|
|
11
|
+
* inverting cell styles (SGR 7). Post-render, same damage-tracking machinery
|
|
12
|
+
* as applySelectionOverlay — the diff picks up highlighted cells as ordinary
|
|
13
|
+
* changes, LogUpdate stays a pure diff engine.
|
|
14
|
+
*
|
|
15
|
+
* Case-insensitive. Handles wide characters (CJK, emoji) by building a
|
|
16
|
+
* col-of-char map per row — the Nth character isn't at col N when wide chars
|
|
17
|
+
* are present (each occupies 2 cells: head + SpacerTail).
|
|
18
|
+
*
|
|
19
|
+
* This ONLY inverts — there is no "current match" logic here. The yellow
|
|
20
|
+
* current-match overlay is handled separately by applyPositionedHighlight
|
|
21
|
+
* (render-to-screen.ts), which writes on top using positions scanned from
|
|
22
|
+
* the target message's DOM subtree.
|
|
23
|
+
*
|
|
24
|
+
* Returns true if any match was highlighted (damage gate — caller forces
|
|
25
|
+
* full-frame damage when true).
|
|
26
|
+
*/
|
|
27
|
+
export function applySearchHighlight(
|
|
28
|
+
screen: Screen,
|
|
29
|
+
query: string,
|
|
30
|
+
stylePool: StylePool,
|
|
31
|
+
): boolean {
|
|
32
|
+
if (!query) return false
|
|
33
|
+
const lq = query.toLowerCase()
|
|
34
|
+
const qlen = lq.length
|
|
35
|
+
const w = screen.width
|
|
36
|
+
const noSelect = screen.noSelect
|
|
37
|
+
const height = screen.height
|
|
38
|
+
|
|
39
|
+
let applied = false
|
|
40
|
+
for (let row = 0; row < height; row++) {
|
|
41
|
+
const rowOff = row * w
|
|
42
|
+
// Build row text (already lowercased) + code-unit→cell-index map.
|
|
43
|
+
// Three skip conditions, all aligned with setCellStyleId /
|
|
44
|
+
// extractRowText (selection.ts):
|
|
45
|
+
// - SpacerTail: 2nd cell of a wide char, no char of its own
|
|
46
|
+
// - SpacerHead: end-of-line padding when a wide char wraps
|
|
47
|
+
// - noSelect: gutters (⎿, line numbers) — same exclusion as
|
|
48
|
+
// applySelectionOverlay. "Highlight what you see" still holds for
|
|
49
|
+
// content; gutters aren't search targets.
|
|
50
|
+
// Lowercasing per-char (not on the joined string at the end) means
|
|
51
|
+
// codeUnitToCell maps positions in the LOWERCASED text — U+0130
|
|
52
|
+
// (Turkish İ) lowercases to 2 code units, so lowering the joined
|
|
53
|
+
// string would desync indexOf positions from the map.
|
|
54
|
+
let text = ''
|
|
55
|
+
const colOf: number[] = []
|
|
56
|
+
const codeUnitToCell: number[] = []
|
|
57
|
+
for (let col = 0; col < w; col++) {
|
|
58
|
+
const idx = rowOff + col
|
|
59
|
+
const cell = cellAtIndex(screen, idx)
|
|
60
|
+
if (
|
|
61
|
+
cell.width === CellWidth.SpacerTail ||
|
|
62
|
+
cell.width === CellWidth.SpacerHead ||
|
|
63
|
+
noSelect[idx] === 1
|
|
64
|
+
) {
|
|
65
|
+
continue
|
|
66
|
+
}
|
|
67
|
+
const lc = cell.char.toLowerCase()
|
|
68
|
+
const cellIdx = colOf.length
|
|
69
|
+
for (let i = 0; i < lc.length; i++) {
|
|
70
|
+
codeUnitToCell.push(cellIdx)
|
|
71
|
+
}
|
|
72
|
+
text += lc
|
|
73
|
+
colOf.push(col)
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
let pos = text.indexOf(lq)
|
|
77
|
+
while (pos >= 0) {
|
|
78
|
+
applied = true
|
|
79
|
+
const startCi = codeUnitToCell[pos]!
|
|
80
|
+
const endCi = codeUnitToCell[pos + qlen - 1]!
|
|
81
|
+
for (let ci = startCi; ci <= endCi; ci++) {
|
|
82
|
+
const col = colOf[ci]!
|
|
83
|
+
const cell = cellAtIndex(screen, rowOff + col)
|
|
84
|
+
setCellStyleId(screen, col, row, stylePool.withInverse(cell.styleId))
|
|
85
|
+
}
|
|
86
|
+
// Non-overlapping advance (less/vim/grep/Ctrl+F). pos+1 would find
|
|
87
|
+
// 'aa' at 0 AND 1 in 'aaa' → double-invert cell 1.
|
|
88
|
+
pos = text.indexOf(lq, pos + qlen)
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
return applied
|
|
93
|
+
}
|