@underactive/pi-topping 0.5.0 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +24 -10
- package/index.ts +0 -1
- package/package.json +3 -3
- package/src/flags.ts +19 -0
- package/src/menu.ts +28 -20
- package/src/pi-installer.ts +63 -0
- package/src/preview.ts +46 -13
- package/src/prompt-decorator.ts +9 -8
- package/src/session.ts +42 -17
- package/src/settings.ts +41 -7
- package/src/setup-check.ts +20 -0
- package/src/setup-command.ts +136 -0
- package/src/toppings.ts +158 -0
- package/src/util.ts +9 -0
- package/src/word-packs.ts +119 -0
- package/wordpacks/simcity.json +432 -0
- package/wordpacks/star-trek.json +283 -0
- package/wordpacks/star-wars.json +283 -0
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
import { getAgentDir } from "@earendil-works/pi-coding-agent";
|
|
2
|
+
import { readdirSync, readFileSync } from "node:fs";
|
|
3
|
+
import { fileURLToPath } from "node:url";
|
|
4
|
+
import { join } from "node:path";
|
|
5
|
+
import { isPlainObject, stripControlChars } from "./util.ts";
|
|
6
|
+
import { WORDS, type WordEntry } from "./words.ts";
|
|
7
|
+
|
|
8
|
+
const PACK_ID_PATTERN = /^[a-z][a-z0-9-]{0,63}$/;
|
|
9
|
+
const RESERVED_BUNDLED_PACK_IDS = new Set(["simcity", "star-trek", "star-wars"]);
|
|
10
|
+
|
|
11
|
+
export function isWordPackId(value: string): boolean { return PACK_ID_PATTERN.test(value); }
|
|
12
|
+
const BUNDLED_PACK_DIRECTORY = fileURLToPath(new URL("../wordpacks/", import.meta.url));
|
|
13
|
+
|
|
14
|
+
export interface WordPack {
|
|
15
|
+
id: string;
|
|
16
|
+
name: string;
|
|
17
|
+
description?: string;
|
|
18
|
+
attribution?: string;
|
|
19
|
+
words: readonly WordEntry[];
|
|
20
|
+
bundled: boolean;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export interface WorkingTextSelection {
|
|
24
|
+
text: string;
|
|
25
|
+
pastTense: string;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export function wordPacksPath(): string {
|
|
29
|
+
return join(getAgentDir(), "pi-topping", "word-packs.json");
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
function safeText(value: unknown): string | undefined {
|
|
33
|
+
if (typeof value !== "string") return undefined;
|
|
34
|
+
const text = stripControlChars(value).trim();
|
|
35
|
+
return text || undefined;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/** Validate a pack document, discarding invalid packs and entries. */
|
|
39
|
+
export function parseWordPacks(value: unknown, bundled = false): WordPack[] {
|
|
40
|
+
if (!isPlainObject(value)) return [];
|
|
41
|
+
const rawPacks = Array.isArray(value.packs) ? value.packs : [value];
|
|
42
|
+
const packs: WordPack[] = [];
|
|
43
|
+
const ids = new Set<string>();
|
|
44
|
+
for (const rawPack of rawPacks) {
|
|
45
|
+
if (!isPlainObject(rawPack)) continue;
|
|
46
|
+
const id = safeText(rawPack.id);
|
|
47
|
+
const name = safeText(rawPack.name);
|
|
48
|
+
if (!id || !name || !isWordPackId(id) || ids.has(id) || (!bundled && RESERVED_BUNDLED_PACK_IDS.has(id))) continue;
|
|
49
|
+
const words: WordEntry[] = [];
|
|
50
|
+
if (Array.isArray(rawPack.words)) {
|
|
51
|
+
for (const rawWord of rawPack.words) {
|
|
52
|
+
if (!isPlainObject(rawWord)) continue;
|
|
53
|
+
const present_tense = safeText(rawWord.present_tense);
|
|
54
|
+
const past_tense = safeText(rawWord.past_tense);
|
|
55
|
+
if (present_tense && past_tense) words.push({ present_tense, past_tense });
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
if (!words.length) continue;
|
|
59
|
+
ids.add(id);
|
|
60
|
+
const description = safeText(rawPack.description);
|
|
61
|
+
const attribution = safeText(rawPack.attribution);
|
|
62
|
+
packs.push({ id, name, ...(description ? { description } : {}), ...(attribution ? { attribution } : {}), words, bundled });
|
|
63
|
+
}
|
|
64
|
+
return packs;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/** Load every shipped JSON pack. Missing or invalid bundled data is a package-integrity error. */
|
|
68
|
+
export function loadBundledWordPacks(): WordPack[] {
|
|
69
|
+
const files = readdirSync(BUNDLED_PACK_DIRECTORY).filter((file) => file.endsWith(".json")).sort();
|
|
70
|
+
const packs: WordPack[] = [];
|
|
71
|
+
const ids = new Set<string>();
|
|
72
|
+
for (const file of files) {
|
|
73
|
+
let value: unknown;
|
|
74
|
+
try {
|
|
75
|
+
value = JSON.parse(readFileSync(join(BUNDLED_PACK_DIRECTORY, file), "utf8"));
|
|
76
|
+
} catch (error) {
|
|
77
|
+
throw new Error(`Invalid bundled word pack: ${file}`, { cause: error });
|
|
78
|
+
}
|
|
79
|
+
const parsed = parseWordPacks(value, true);
|
|
80
|
+
if (!parsed.length) throw new Error(`Invalid bundled word pack: ${file}`);
|
|
81
|
+
for (const pack of parsed) {
|
|
82
|
+
if (ids.has(pack.id)) throw new Error(`Duplicate bundled word pack ID: ${pack.id}`);
|
|
83
|
+
ids.add(pack.id);
|
|
84
|
+
packs.push(pack);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
if (!packs.some((pack) => pack.id === "simcity")) throw new Error("Missing bundled SimCity word pack");
|
|
88
|
+
const bundledIds = new Set(packs.map((pack) => pack.id));
|
|
89
|
+
for (const id of RESERVED_BUNDLED_PACK_IDS) {
|
|
90
|
+
if (!bundledIds.has(id)) throw new Error(`Missing bundled word pack: ${id}`);
|
|
91
|
+
}
|
|
92
|
+
for (const id of bundledIds) {
|
|
93
|
+
if (!RESERVED_BUNDLED_PACK_IDS.has(id)) throw new Error(`Bundled word pack "${id}" must be listed in RESERVED_BUNDLED_PACK_IDS to prevent user-pack shadowing`);
|
|
94
|
+
}
|
|
95
|
+
return packs;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
/** User pack failures are intentionally non-fatal. */
|
|
99
|
+
export function loadUserWordPacks(): WordPack[] {
|
|
100
|
+
try {
|
|
101
|
+
return parseWordPacks(JSON.parse(readFileSync(wordPacksPath(), "utf8")));
|
|
102
|
+
} catch {
|
|
103
|
+
return [];
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
export function isWordPackEnabled(id: string, enabled: Record<string, boolean>): boolean {
|
|
108
|
+
return enabled[id] === true;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
export function selectWorkingTextSelection(enabled: Record<string, boolean>, packs: readonly WordPack[], fraction: number): WorkingTextSelection {
|
|
112
|
+
const pool = [...WORDS, ...packs.filter((pack) => isWordPackEnabled(pack.id, enabled)).flatMap((pack) => pack.words)];
|
|
113
|
+
const entry = pool[Math.min(pool.length - 1, Math.floor(fraction * pool.length))]!;
|
|
114
|
+
return { text: `${entry.present_tense}…`, pastTense: entry.past_tense };
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
export function pickWorkingTextSelection(enabled: Record<string, boolean>, packs: readonly WordPack[]): WorkingTextSelection {
|
|
118
|
+
return selectWorkingTextSelection(enabled, packs, Math.random());
|
|
119
|
+
}
|
|
@@ -0,0 +1,432 @@
|
|
|
1
|
+
{
|
|
2
|
+
"packs": [
|
|
3
|
+
{
|
|
4
|
+
"id": "simcity",
|
|
5
|
+
"name": "SimCity",
|
|
6
|
+
"description": "Classic city-simulation status phrases.",
|
|
7
|
+
"attribution": "Source: genact data/simcity.txt (MIT), Copyright 2020 Sven-Hendrik Haase. https://github.com/svenstaro/genact",
|
|
8
|
+
"words": [
|
|
9
|
+
{
|
|
10
|
+
"present_tense": "Adding hidden agendas",
|
|
11
|
+
"past_tense": "Added"
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
"present_tense": "Adjusting bell curves",
|
|
15
|
+
"past_tense": "Adjusted"
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"present_tense": "Aesthesizing industrial areas",
|
|
19
|
+
"past_tense": "Aesthesized"
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
"present_tense": "Aligning covariance matrices",
|
|
23
|
+
"past_tense": "Aligned"
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
"present_tense": "Applying Feng Shui shaders",
|
|
27
|
+
"past_tense": "Applied"
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
"present_tense": "Applying theatre soda layer",
|
|
31
|
+
"past_tense": "Applied"
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
"present_tense": "Asserting packed exemplars",
|
|
35
|
+
"past_tense": "Asserted"
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
"present_tense": "Attempting to lock back-buffer",
|
|
39
|
+
"past_tense": "Attempted"
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
"present_tense": "Binding sapling root system",
|
|
43
|
+
"past_tense": "Bound"
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
"present_tense": "Breeding fauna",
|
|
47
|
+
"past_tense": "Bred"
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
"present_tense": "Building data trees",
|
|
51
|
+
"past_tense": "Built"
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
"present_tense": "Bureacritizing bureaucracies",
|
|
55
|
+
"past_tense": "Bureacritized"
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
"present_tense": "Calculating inverse probability matrices",
|
|
59
|
+
"past_tense": "Calculated"
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
"present_tense": "Calculating llama expectoration trajectory",
|
|
63
|
+
"past_tense": "Calculated"
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
"present_tense": "Calibrating blue skies",
|
|
67
|
+
"past_tense": "Calibrated"
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
"present_tense": "Charging ozone layer",
|
|
71
|
+
"past_tense": "Charged"
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
"present_tense": "Coalescing cloud formations",
|
|
75
|
+
"past_tense": "Coalesced"
|
|
76
|
+
},
|
|
77
|
+
{
|
|
78
|
+
"present_tense": "Cohorting exemplars",
|
|
79
|
+
"past_tense": "Cohorted"
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
"present_tense": "Collecting meteor particles",
|
|
83
|
+
"past_tense": "Collected"
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
"present_tense": "Compounding inert tessellations",
|
|
87
|
+
"past_tense": "Compounded"
|
|
88
|
+
},
|
|
89
|
+
{
|
|
90
|
+
"present_tense": "Compressing fish files",
|
|
91
|
+
"past_tense": "Compressed"
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
"present_tense": "Computing optimal bin packing",
|
|
95
|
+
"past_tense": "Computed"
|
|
96
|
+
},
|
|
97
|
+
{
|
|
98
|
+
"present_tense": "Concatenating sub-contractors",
|
|
99
|
+
"past_tense": "Concatenated"
|
|
100
|
+
},
|
|
101
|
+
{
|
|
102
|
+
"present_tense": "Containing existential buffer",
|
|
103
|
+
"past_tense": "Contained"
|
|
104
|
+
},
|
|
105
|
+
{
|
|
106
|
+
"present_tense": "Debarking ark ramp",
|
|
107
|
+
"past_tense": "Debarked"
|
|
108
|
+
},
|
|
109
|
+
{
|
|
110
|
+
"present_tense": "Debunching unionized commercial services",
|
|
111
|
+
"past_tense": "Debunched"
|
|
112
|
+
},
|
|
113
|
+
{
|
|
114
|
+
"present_tense": "Deciding what message to display next",
|
|
115
|
+
"past_tense": "Decided"
|
|
116
|
+
},
|
|
117
|
+
{
|
|
118
|
+
"present_tense": "Decomposing singular values",
|
|
119
|
+
"past_tense": "Decomposed"
|
|
120
|
+
},
|
|
121
|
+
{
|
|
122
|
+
"present_tense": "Decrementing tectonic plates",
|
|
123
|
+
"past_tense": "Decremented"
|
|
124
|
+
},
|
|
125
|
+
{
|
|
126
|
+
"present_tense": "Deleting ferry routes",
|
|
127
|
+
"past_tense": "Deleted"
|
|
128
|
+
},
|
|
129
|
+
{
|
|
130
|
+
"present_tense": "Depixelating inner mountain surface back faces",
|
|
131
|
+
"past_tense": "Depixelated"
|
|
132
|
+
},
|
|
133
|
+
{
|
|
134
|
+
"present_tense": "Depositing slush funds",
|
|
135
|
+
"past_tense": "Deposited"
|
|
136
|
+
},
|
|
137
|
+
{
|
|
138
|
+
"present_tense": "Destabilizing economic indicators",
|
|
139
|
+
"past_tense": "Destabilized"
|
|
140
|
+
},
|
|
141
|
+
{
|
|
142
|
+
"present_tense": "Determining width of blast fronts",
|
|
143
|
+
"past_tense": "Determined"
|
|
144
|
+
},
|
|
145
|
+
{
|
|
146
|
+
"present_tense": "Deunionizing bulldozers",
|
|
147
|
+
"past_tense": "Deunionized"
|
|
148
|
+
},
|
|
149
|
+
{
|
|
150
|
+
"present_tense": "Dicing models",
|
|
151
|
+
"past_tense": "Diced"
|
|
152
|
+
},
|
|
153
|
+
{
|
|
154
|
+
"present_tense": "Diluting livestock nutrition variables",
|
|
155
|
+
"past_tense": "Diluted"
|
|
156
|
+
},
|
|
157
|
+
{
|
|
158
|
+
"present_tense": "Downloading satellite terrain data",
|
|
159
|
+
"past_tense": "Downloaded"
|
|
160
|
+
},
|
|
161
|
+
{
|
|
162
|
+
"present_tense": "Exposing flash variables to streak system",
|
|
163
|
+
"past_tense": "Exposed"
|
|
164
|
+
},
|
|
165
|
+
{
|
|
166
|
+
"present_tense": "Extracting resources",
|
|
167
|
+
"past_tense": "Extracted"
|
|
168
|
+
},
|
|
169
|
+
{
|
|
170
|
+
"present_tense": "Factoring pay scale",
|
|
171
|
+
"past_tense": "Factored"
|
|
172
|
+
},
|
|
173
|
+
{
|
|
174
|
+
"present_tense": "Fixing election outcome matrix",
|
|
175
|
+
"past_tense": "Fixed"
|
|
176
|
+
},
|
|
177
|
+
{
|
|
178
|
+
"present_tense": "Flood-filling ground water",
|
|
179
|
+
"past_tense": "Flood-Filled"
|
|
180
|
+
},
|
|
181
|
+
{
|
|
182
|
+
"present_tense": "Flushing pipe network",
|
|
183
|
+
"past_tense": "Flushed"
|
|
184
|
+
},
|
|
185
|
+
{
|
|
186
|
+
"present_tense": "Gathering particle sources",
|
|
187
|
+
"past_tense": "Gathered"
|
|
188
|
+
},
|
|
189
|
+
{
|
|
190
|
+
"present_tense": "Generating jobs",
|
|
191
|
+
"past_tense": "Generated"
|
|
192
|
+
},
|
|
193
|
+
{
|
|
194
|
+
"present_tense": "Gesticulating mimes",
|
|
195
|
+
"past_tense": "Gesticulated"
|
|
196
|
+
},
|
|
197
|
+
{
|
|
198
|
+
"present_tense": "Graphing whale migration",
|
|
199
|
+
"past_tense": "Graphed"
|
|
200
|
+
},
|
|
201
|
+
{
|
|
202
|
+
"present_tense": "Hiding Willio Webnet mask",
|
|
203
|
+
"past_tense": "Hid"
|
|
204
|
+
},
|
|
205
|
+
{
|
|
206
|
+
"present_tense": "Implementing impeachment routine",
|
|
207
|
+
"past_tense": "Implemented"
|
|
208
|
+
},
|
|
209
|
+
{
|
|
210
|
+
"present_tense": "Increasing accuracy of RCI simulators",
|
|
211
|
+
"past_tense": "Increased"
|
|
212
|
+
},
|
|
213
|
+
{
|
|
214
|
+
"present_tense": "Increasing magmafacation",
|
|
215
|
+
"past_tense": "Increased"
|
|
216
|
+
},
|
|
217
|
+
{
|
|
218
|
+
"present_tense": "Initializing my Sim tracking mechanism",
|
|
219
|
+
"past_tense": "Initialized"
|
|
220
|
+
},
|
|
221
|
+
{
|
|
222
|
+
"present_tense": "Initializing rhinoceros breeding timetable",
|
|
223
|
+
"past_tense": "Initialized"
|
|
224
|
+
},
|
|
225
|
+
{
|
|
226
|
+
"present_tense": "Initializing robotic click-path AI",
|
|
227
|
+
"past_tense": "Initialized"
|
|
228
|
+
},
|
|
229
|
+
{
|
|
230
|
+
"present_tense": "Inserting sublimated messages",
|
|
231
|
+
"past_tense": "Inserted"
|
|
232
|
+
},
|
|
233
|
+
{
|
|
234
|
+
"present_tense": "Integrating curves",
|
|
235
|
+
"past_tense": "Integrated"
|
|
236
|
+
},
|
|
237
|
+
{
|
|
238
|
+
"present_tense": "Integrating illumination form factors",
|
|
239
|
+
"past_tense": "Integrated"
|
|
240
|
+
},
|
|
241
|
+
{
|
|
242
|
+
"present_tense": "Integrating population graphs",
|
|
243
|
+
"past_tense": "Integrated"
|
|
244
|
+
},
|
|
245
|
+
{
|
|
246
|
+
"present_tense": "Iterating cellular automata",
|
|
247
|
+
"past_tense": "Iterated"
|
|
248
|
+
},
|
|
249
|
+
{
|
|
250
|
+
"present_tense": "Lecturing errant subsystems",
|
|
251
|
+
"past_tense": "Lectured"
|
|
252
|
+
},
|
|
253
|
+
{
|
|
254
|
+
"present_tense": "Mixing genetic pool",
|
|
255
|
+
"past_tense": "Mixed"
|
|
256
|
+
},
|
|
257
|
+
{
|
|
258
|
+
"present_tense": "Modeling object components",
|
|
259
|
+
"past_tense": "Modeled"
|
|
260
|
+
},
|
|
261
|
+
{
|
|
262
|
+
"present_tense": "Mopping occupant leaks",
|
|
263
|
+
"past_tense": "Mopped"
|
|
264
|
+
},
|
|
265
|
+
{
|
|
266
|
+
"present_tense": "Normalizing power",
|
|
267
|
+
"past_tense": "Normalized"
|
|
268
|
+
},
|
|
269
|
+
{
|
|
270
|
+
"present_tense": "Obfuscating Quigley matrix",
|
|
271
|
+
"past_tense": "Obfuscated"
|
|
272
|
+
},
|
|
273
|
+
{
|
|
274
|
+
"present_tense": "Overconstraining dirty industry calculations",
|
|
275
|
+
"past_tense": "Overconstrained"
|
|
276
|
+
},
|
|
277
|
+
{
|
|
278
|
+
"present_tense": "Partitioning city grid singularities",
|
|
279
|
+
"past_tense": "Partitioned"
|
|
280
|
+
},
|
|
281
|
+
{
|
|
282
|
+
"present_tense": "Perturbing matrices",
|
|
283
|
+
"past_tense": "Perturbed"
|
|
284
|
+
},
|
|
285
|
+
{
|
|
286
|
+
"present_tense": "Pixelating nude patch",
|
|
287
|
+
"past_tense": "Pixelated"
|
|
288
|
+
},
|
|
289
|
+
{
|
|
290
|
+
"present_tense": "Polishing water highlights",
|
|
291
|
+
"past_tense": "Polished"
|
|
292
|
+
},
|
|
293
|
+
{
|
|
294
|
+
"present_tense": "Populating lot templates",
|
|
295
|
+
"past_tense": "Populated"
|
|
296
|
+
},
|
|
297
|
+
{
|
|
298
|
+
"present_tense": "Preparing sprites for random walks",
|
|
299
|
+
"past_tense": "Prepared"
|
|
300
|
+
},
|
|
301
|
+
{
|
|
302
|
+
"present_tense": "Prioritizing landmarks",
|
|
303
|
+
"past_tense": "Prioritized"
|
|
304
|
+
},
|
|
305
|
+
{
|
|
306
|
+
"present_tense": "Projecting law enforcement pastry intake",
|
|
307
|
+
"past_tense": "Projected"
|
|
308
|
+
},
|
|
309
|
+
{
|
|
310
|
+
"present_tense": "Realigning alternate time frames",
|
|
311
|
+
"past_tense": "Realigned"
|
|
312
|
+
},
|
|
313
|
+
{
|
|
314
|
+
"present_tense": "Reconfiguring user mental processes",
|
|
315
|
+
"past_tense": "Reconfigured"
|
|
316
|
+
},
|
|
317
|
+
{
|
|
318
|
+
"present_tense": "Relaxing splines",
|
|
319
|
+
"past_tense": "Relaxed"
|
|
320
|
+
},
|
|
321
|
+
{
|
|
322
|
+
"present_tense": "Removing road network speed bumps",
|
|
323
|
+
"past_tense": "Removed"
|
|
324
|
+
},
|
|
325
|
+
{
|
|
326
|
+
"present_tense": "Removing texture gradients",
|
|
327
|
+
"past_tense": "Removed"
|
|
328
|
+
},
|
|
329
|
+
{
|
|
330
|
+
"present_tense": "Removing vehicle avoidance behavior",
|
|
331
|
+
"past_tense": "Removed"
|
|
332
|
+
},
|
|
333
|
+
{
|
|
334
|
+
"present_tense": "Resolving GUID conflict",
|
|
335
|
+
"past_tense": "Resolved"
|
|
336
|
+
},
|
|
337
|
+
{
|
|
338
|
+
"present_tense": "Reticulating splines",
|
|
339
|
+
"past_tense": "Reticulated"
|
|
340
|
+
},
|
|
341
|
+
{
|
|
342
|
+
"present_tense": "Retracting Phong shader",
|
|
343
|
+
"past_tense": "Retracted"
|
|
344
|
+
},
|
|
345
|
+
{
|
|
346
|
+
"present_tense": "Retrieving from back store",
|
|
347
|
+
"past_tense": "Retrieved"
|
|
348
|
+
},
|
|
349
|
+
{
|
|
350
|
+
"present_tense": "Reverse engineering image consultant",
|
|
351
|
+
"past_tense": "Engineered"
|
|
352
|
+
},
|
|
353
|
+
{
|
|
354
|
+
"present_tense": "Routing neural network infrastructure",
|
|
355
|
+
"past_tense": "Routed"
|
|
356
|
+
},
|
|
357
|
+
{
|
|
358
|
+
"present_tense": "Scattering rhino food sources",
|
|
359
|
+
"past_tense": "Scattered"
|
|
360
|
+
},
|
|
361
|
+
{
|
|
362
|
+
"present_tense": "Scrubbing terrain",
|
|
363
|
+
"past_tense": "Scrubbed"
|
|
364
|
+
},
|
|
365
|
+
{
|
|
366
|
+
"present_tense": "Searching for llamas",
|
|
367
|
+
"past_tense": "Searched"
|
|
368
|
+
},
|
|
369
|
+
{
|
|
370
|
+
"present_tense": "Seeding architecture simulation parameters",
|
|
371
|
+
"past_tense": "Seeded"
|
|
372
|
+
},
|
|
373
|
+
{
|
|
374
|
+
"present_tense": "Sequencing particles",
|
|
375
|
+
"past_tense": "Sequenced"
|
|
376
|
+
},
|
|
377
|
+
{
|
|
378
|
+
"present_tense": "Setting advisor moods",
|
|
379
|
+
"past_tense": "Set"
|
|
380
|
+
},
|
|
381
|
+
{
|
|
382
|
+
"present_tense": "Setting inner deity indicators",
|
|
383
|
+
"past_tense": "Set"
|
|
384
|
+
},
|
|
385
|
+
{
|
|
386
|
+
"present_tense": "Setting universal physical constants",
|
|
387
|
+
"past_tense": "Set"
|
|
388
|
+
},
|
|
389
|
+
{
|
|
390
|
+
"present_tense": "Sonically enhancing occupant-free timber",
|
|
391
|
+
"past_tense": "Enhanced"
|
|
392
|
+
},
|
|
393
|
+
{
|
|
394
|
+
"present_tense": "Speculating stock market indices",
|
|
395
|
+
"past_tense": "Speculated"
|
|
396
|
+
},
|
|
397
|
+
{
|
|
398
|
+
"present_tense": "Splatting transforms",
|
|
399
|
+
"past_tense": "Splatted"
|
|
400
|
+
},
|
|
401
|
+
{
|
|
402
|
+
"present_tense": "Stratifying ground layers",
|
|
403
|
+
"past_tense": "Stratified"
|
|
404
|
+
},
|
|
405
|
+
{
|
|
406
|
+
"present_tense": "Sub-sampling water data",
|
|
407
|
+
"past_tense": "Sub-Sampled"
|
|
408
|
+
},
|
|
409
|
+
{
|
|
410
|
+
"present_tense": "Synthesizing gravity",
|
|
411
|
+
"past_tense": "Synthesized"
|
|
412
|
+
},
|
|
413
|
+
{
|
|
414
|
+
"present_tense": "Synthesizing wavelets",
|
|
415
|
+
"past_tense": "Synthesized"
|
|
416
|
+
},
|
|
417
|
+
{
|
|
418
|
+
"present_tense": "Time-compressing simulator clock",
|
|
419
|
+
"past_tense": "Time-Compressed"
|
|
420
|
+
},
|
|
421
|
+
{
|
|
422
|
+
"present_tense": "Weathering buildings",
|
|
423
|
+
"past_tense": "Weathered"
|
|
424
|
+
},
|
|
425
|
+
{
|
|
426
|
+
"present_tense": "Zeroing crime network",
|
|
427
|
+
"past_tense": "Zeroed"
|
|
428
|
+
}
|
|
429
|
+
]
|
|
430
|
+
}
|
|
431
|
+
]
|
|
432
|
+
}
|