@askexenow/exe-os 0.9.215 → 0.9.216

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.
@@ -4,7 +4,7 @@ import {
4
4
  } from "../chunk-6457MEIK.js";
5
5
  import {
6
6
  lightweightSearch
7
- } from "../chunk-BR6IZFIL.js";
7
+ } from "../chunk-755ADH4S.js";
8
8
  import "../chunk-Z3O6UJUX.js";
9
9
  import "../chunk-CHCA3ZM2.js";
10
10
  import "../chunk-Y2B6MB3J.js";
@@ -2,7 +2,7 @@
2
2
  import {
3
3
  hybridSearch,
4
4
  lightweightSearch
5
- } from "../chunk-BR6IZFIL.js";
5
+ } from "../chunk-755ADH4S.js";
6
6
  import {
7
7
  initStore
8
8
  } from "../chunk-Z3O6UJUX.js";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  lightweightSearch
3
- } from "./chunk-BR6IZFIL.js";
3
+ } from "./chunk-755ADH4S.js";
4
4
  import "./chunk-Z3O6UJUX.js";
5
5
  import "./chunk-CHCA3ZM2.js";
6
6
  import "./chunk-Y2B6MB3J.js";
@@ -7,7 +7,7 @@ import {
7
7
  import {
8
8
  isRerankerAvailable,
9
9
  rerankWithScores
10
- } from "./chunk-OLU3B6B7.js";
10
+ } from "./chunk-WELKUXEL.js";
11
11
  import {
12
12
  getEntityByName,
13
13
  getEntityNeighbors,
@@ -187,7 +187,7 @@ import {
187
187
  import {
188
188
  hybridSearch,
189
189
  recentRecords
190
- } from "./chunk-BR6IZFIL.js";
190
+ } from "./chunk-755ADH4S.js";
191
191
  import {
192
192
  attachDocumentMetadata,
193
193
  flushBatch,
@@ -237,7 +237,7 @@ async function hybridSearch(queryText, agentId, options) {
237
237
  let rerankerAvailable = false;
238
238
  if (process.env.EXE_IS_DAEMON === "1") {
239
239
  try {
240
- const { isRerankerAvailable } = await import("./reranker-7P6436GV.js");
240
+ const { isRerankerAvailable } = await import("./reranker-UMCHVO3A.js");
241
241
  rerankerAvailable = isRerankerAvailable();
242
242
  } catch {
243
243
  }
@@ -401,7 +401,7 @@ async function hybridSearch(queryText, agentId, options) {
401
401
  try {
402
402
  let rerankedRecords;
403
403
  if (graphContextMap.size > 0) {
404
- const { rerankWithContext } = await import("./reranker-7P6436GV.js");
404
+ const { rerankWithContext } = await import("./reranker-UMCHVO3A.js");
405
405
  const candidates = merged.map((m) => ({
406
406
  text: m.raw_text,
407
407
  context: graphContextMap.get(m.id)
@@ -409,7 +409,7 @@ async function hybridSearch(queryText, agentId, options) {
409
409
  const scored = await rerankWithContext(effectiveQuery, candidates, rerankReturnLimit);
410
410
  rerankedRecords = scored.map((s) => merged[s.index]);
411
411
  } else {
412
- const { rerank } = await import("./reranker-7P6436GV.js");
412
+ const { rerank } = await import("./reranker-UMCHVO3A.js");
413
413
  rerankedRecords = await rerank(effectiveQuery, merged, rerankReturnLimit);
414
414
  }
415
415
  if (rerankedRecords.length > 0) {
@@ -4,7 +4,7 @@ import {
4
4
  import {
5
5
  hybridSearch,
6
6
  lightweightSearch
7
- } from "../chunk-BR6IZFIL.js";
7
+ } from "../chunk-755ADH4S.js";
8
8
  import {
9
9
  initStore
10
10
  } from "../chunk-Z3O6UJUX.js";
@@ -1,11 +1,11 @@
1
1
  {
2
2
  "version": 1,
3
- "generatedAt": "2026-06-04T09:45:57.694Z",
3
+ "generatedAt": "2026-06-04T09:53:03.365Z",
4
4
  "hashes": {
5
5
  "bug-report-worker.js": "ce596e0f45fd78dc989790158e39a027ed0f73edc089b8a18aca92bd319f4a4f",
6
6
  "codex-stop-task-finalizer.js": "fc2025e942fd0195e1f1153c521b03880365769fc9e4ca74ec8c9c11cc8d73b0",
7
7
  "commit-complete.js": "ef0c6635014efecbf99861d5b16896f1a64ef0dfac04cf52c258b3ef0ee9173f",
8
- "error-recall.js": "9208c0b67989b604cf7c02f4ee19bd62c3cd6b3f128967b310294c13a566e738",
8
+ "error-recall.js": "2c70190a3c7c9043cb8b20dfae8feedf8a548c2f8270ae9cab278e8c9daeb688",
9
9
  "exe-heartbeat-hook.js": "58457ef72bc48470c1ca8486d249c7e52c025e907fa40874385cab7e968532bd",
10
10
  "ingest-worker.js": "9fa61f508a0909ac7d6600d9fa932a268ed72ccd06b55734fe6e1f565fcc1cae",
11
11
  "ingest.js": "09537f7cf5a516c636370b7d862348a0d43661de68b375e47c8a8803e56a75f0",
@@ -15,9 +15,9 @@
15
15
  "post-tool-combined.js": "1c37056d5072b4c50c0d32540950c5887e8f6ed9b4162cbe6830186f76a98c00",
16
16
  "pre-compact.js": "6c532d964a9b1dd599bc8ad09e955e35df7adc517f015a1c58e62950962e702d",
17
17
  "pre-tool-use.js": "f57863b4b92bba49cad4af70f6757f095def30e2929e987809ac63fe760f8137",
18
- "prompt-submit.js": "39882c517ff6c046becfaf620405186e019b039322a29633d374b9b06755a024",
19
- "session-end.js": "8e54750a694d70a295fafa9e9f075bd327b0c0752a86932454d80735ee053f29",
20
- "session-start.js": "87ef9d0877a4a08b3f24e5514f62c1d46aa5f0877c9da3873c4fdb040c98573d",
18
+ "prompt-submit.js": "3456cb1dc5cc9c5e389a3e5c38a2ab96e19de5e1673990f445953dc6631ad6f2",
19
+ "session-end.js": "c7118b2d34c6af542cbb3d9bd6aded5d2a86fbf52d1b620c020f35800d9c1449",
20
+ "session-start.js": "76b36623e8bfe30be9db34dfff43e916dee36fe44120bc98ce9898e3af17da4d",
21
21
  "stop.js": "29df0882ee8f73e24a81da11e13290b465583ba23a8665171990842fe28819e7",
22
22
  "subagent-stop.js": "40309362ca596330a5c6c9339a20bfb01939c069c31224fd9645ab0a539c2ef2",
23
23
  "summary-worker.js": "8af41adc5a73f7c8cc6914e14dbbae501ee256439efea500fab69dff77237597"
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  hybridSearch,
3
3
  lightweightSearch
4
- } from "../chunk-BR6IZFIL.js";
4
+ } from "../chunk-755ADH4S.js";
5
5
  import {
6
6
  initStore
7
7
  } from "../chunk-Z3O6UJUX.js";
@@ -83,7 +83,7 @@ process.stdin.on("end", async () => {
83
83
  const deathLog = join(homedir(), ".exe-os", "logs", "session-deaths.jsonl");
84
84
  let daemonAlive = false;
85
85
  try {
86
- execSyncForDeath("curl -sf --max-time 2 -X POST http://127.0.0.1:48739/v1/heartbeat -H 'Content-Type: application/json' -d '{}' 2>/dev/null", { timeout: 3e3 });
86
+ execSyncForDeath("curl -sf --max-time 2 http://127.0.0.1:48739/v1/ping 2>/dev/null", { timeout: 3e3 });
87
87
  daemonAlive = true;
88
88
  } catch {
89
89
  }
@@ -163,7 +163,7 @@ You are **${ag.agentId}** (${ag.agentRole}). Daemon is degraded \u2014 memory un
163
163
  query = `last actions on ${projectName}`;
164
164
  header = "## Resuming Session\nHere's where you left off:";
165
165
  try {
166
- const { buildCatchupBrief } = await import("../catchup-brief-DASTJDLI.js");
166
+ const { buildCatchupBrief } = await import("../catchup-brief-WJ7CNOQH.js");
167
167
  const brief = await buildCatchupBrief(
168
168
  agentId,
169
169
  projectName,
@@ -1965,6 +1965,11 @@ async function startMcpHttpServer() {
1965
1965
  }
1966
1966
  return;
1967
1967
  }
1968
+ if (url.pathname === "/v1/ping" && (req.method === "GET" || req.method === "POST")) {
1969
+ res.writeHead(200, { "Content-Type": "application/json" });
1970
+ res.end(JSON.stringify({ status: "ok", pid: process.pid, uptime: Math.floor(process.uptime()) }));
1971
+ return;
1972
+ }
1968
1973
  if (url.pathname === "/v1/heartbeat" && req.method === "POST") {
1969
1974
  try {
1970
1975
  const chunks = [];
@@ -5,7 +5,7 @@ import {
5
5
  recentRecords,
6
6
  rrfMerge,
7
7
  rrfMergeMulti
8
- } from "../chunk-BR6IZFIL.js";
8
+ } from "../chunk-755ADH4S.js";
9
9
  import "../chunk-Z3O6UJUX.js";
10
10
  import "../chunk-CHCA3ZM2.js";
11
11
  import "../chunk-Y2B6MB3J.js";
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  registerAllTools
3
- } from "../chunk-VEA2GFDK.js";
3
+ } from "../chunk-47ASPR6R.js";
4
4
  import "../chunk-557C2IGL.js";
5
5
  import "../chunk-5U6UANGP.js";
6
6
  import "../chunk-YWLO73DO.js";
7
- import "../chunk-OLU3B6B7.js";
7
+ import "../chunk-WELKUXEL.js";
8
8
  import "../chunk-KH5Y6RR4.js";
9
9
  import "../chunk-GCMXBQ7Y.js";
10
10
  import "../chunk-IENYOYZ6.js";
@@ -56,7 +56,7 @@ import "../chunk-6457MEIK.js";
56
56
  import "../chunk-VNP3SECD.js";
57
57
  import "../chunk-EF4PA3TY.js";
58
58
  import "../chunk-LMSRF47U.js";
59
- import "../chunk-BR6IZFIL.js";
59
+ import "../chunk-755ADH4S.js";
60
60
  import "../chunk-Z3O6UJUX.js";
61
61
  import "../chunk-CHCA3ZM2.js";
62
62
  import "../chunk-Y2B6MB3J.js";
@@ -3,11 +3,11 @@ import {
3
3
  } from "../chunk-V4TZI6EO.js";
4
4
  import {
5
5
  registerAllTools
6
- } from "../chunk-VEA2GFDK.js";
6
+ } from "../chunk-47ASPR6R.js";
7
7
  import "../chunk-557C2IGL.js";
8
8
  import "../chunk-5U6UANGP.js";
9
9
  import "../chunk-YWLO73DO.js";
10
- import "../chunk-OLU3B6B7.js";
10
+ import "../chunk-WELKUXEL.js";
11
11
  import "../chunk-KH5Y6RR4.js";
12
12
  import {
13
13
  initLicenseGate
@@ -66,7 +66,7 @@ import "../chunk-6457MEIK.js";
66
66
  import "../chunk-VNP3SECD.js";
67
67
  import "../chunk-EF4PA3TY.js";
68
68
  import "../chunk-LMSRF47U.js";
69
- import "../chunk-BR6IZFIL.js";
69
+ import "../chunk-755ADH4S.js";
70
70
  import {
71
71
  disposeStore,
72
72
  initStore
@@ -5,7 +5,7 @@ import {
5
5
  rerank,
6
6
  rerankWithContext,
7
7
  rerankWithScores
8
- } from "./chunk-OLU3B6B7.js";
8
+ } from "./chunk-WELKUXEL.js";
9
9
  import "./chunk-WXW3XGWX.js";
10
10
  import "./chunk-LYH5HE24.js";
11
11
  import "./chunk-MLKGABMK.js";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@askexenow/exe-os",
3
- "version": "0.9.215",
3
+ "version": "0.9.216",
4
4
  "description": "AI employee operating system — persistent memory, task management, and multi-agent coordination for Claude Code.",
5
5
  "license": "SEE LICENSE IN LICENSE",
6
6
  "type": "module",
@@ -1,8 +1,8 @@
1
1
  {
2
- "current": "0.9.215",
2
+ "current": "0.9.216",
3
3
  "notes": {
4
- "0.9.215": {
5
- "version": "0.9.215",
4
+ "0.9.216": {
5
+ "version": "0.9.216",
6
6
  "date": "2026-06-04",
7
7
  "features": [
8
8
  "working memory — 5th cognition layer (runtime scratchpad)",
@@ -32,6 +32,7 @@
32
32
  "add query expansion + benchmark results to retrieval platform procedure"
33
33
  ],
34
34
  "fixes": [
35
+ "daemon health check was always reporting dead — add /v1/ping",
35
36
  "close remaining orchestration bug gaps",
36
37
  "close orchestration support bug gaps",
37
38
  "remove failed DB warmup workaround",
@@ -55,8 +56,7 @@
55
56
  "database.ts import fixes for corrupt backup cleanup",
56
57
  "add keywords column to shard schema + cleanup corrupt DB backups",
57
58
  "add self_heal_restart to DaemonEvent type + orchestration event tracking",
58
- "shard circuit breaker, event loop self-healing, heap cap, intercom reason",
59
- "add generate-hook-manifest to tsup entries — unblocks publish gate"
59
+ "shard circuit breaker, event loop self-healing, heap cap, intercom reason"
60
60
  ],
61
61
  "security": [
62
62
  "fix shell injection, SSRF, socket leaks, backup validation",
@@ -73,6 +73,7 @@
73
73
  "fix 4 pricing tier bypass vulnerabilities (audit F1-F4)"
74
74
  ],
75
75
  "other": [
76
+ "bump to v0.9.216",
76
77
  "structured agent communication design — typed handoffs + message validation",
77
78
  "bump to v0.9.215",
78
79
  "orchestration primitives design — checkpoint/resume, fan-out/fan-in, trace viewer",
@@ -96,15 +97,16 @@
96
97
  "review push event orchestration roadmap",
97
98
  "add full 4-phase DB Authority roadmap to ARCHITECTURE.md",
98
99
  "update release-notes for v0.9.202 + remove stale lock file",
99
- "bump to v0.9.202",
100
- "bump to v0.9.201"
100
+ "bump to v0.9.202"
101
101
  ],
102
102
  "migration_notes": []
103
103
  },
104
- "0.9.214": {
105
- "version": "0.9.214",
104
+ "0.9.215": {
105
+ "version": "0.9.215",
106
106
  "date": "2026-06-04",
107
107
  "features": [
108
+ "working memory — 5th cognition layer (runtime scratchpad)",
109
+ "concept extraction + entity alias resolution for knowledge graph",
108
110
  "free license telemetry is mandatory, paid can opt out",
109
111
  "add mcp-sessions CLI — rich status table for running sessions",
110
112
  "5-minute telemetry batching + per-tool-call usage in payload",
@@ -127,11 +129,11 @@
127
129
  "nginx /v2/ route for Docker registry proxy on update.askexe.com",
128
130
  "consolidate registry into update.askexe.com — license key = pull auth",
129
131
  "scale daemon heap to 25% of system RAM, support 10+ coordinators",
130
- "add query expansion + benchmark results to retrieval platform procedure",
131
- "3-mode BEAM benchmark — FTS vs FTS+Graph vs Hybrid",
132
- "wire update.askexe.com — billing schema + non-fatal image credentials"
132
+ "add query expansion + benchmark results to retrieval platform procedure"
133
133
  ],
134
134
  "fixes": [
135
+ "close remaining orchestration bug gaps",
136
+ "close orchestration support bug gaps",
135
137
  "remove failed DB warmup workaround",
136
138
  "trace daemon timers and async tmux session checks",
137
139
  "add scope comment to DB warmup task query (readiness gate)",
@@ -154,9 +156,7 @@
154
156
  "add keywords column to shard schema + cleanup corrupt DB backups",
155
157
  "add self_heal_restart to DaemonEvent type + orchestration event tracking",
156
158
  "shard circuit breaker, event loop self-healing, heap cap, intercom reason",
157
- "add generate-hook-manifest to tsup entries — unblocks publish gate",
158
- "remove unused cleanupExpiredJars import — fixes TS6133 blocking publish",
159
- "remove dead actualRuntime variable — fixes TS6133 blocking publish"
159
+ "add generate-hook-manifest to tsup entries — unblocks publish gate"
160
160
  ],
161
161
  "security": [
162
162
  "fix shell injection, SSRF, socket leaks, backup validation",
@@ -173,6 +173,9 @@
173
173
  "fix 4 pricing tier bypass vulnerabilities (audit F1-F4)"
174
174
  ],
175
175
  "other": [
176
+ "structured agent communication design — typed handoffs + message validation",
177
+ "bump to v0.9.215",
178
+ "orchestration primitives design — checkpoint/resume, fan-out/fan-in, trace viewer",
176
179
  "bump to v0.9.214",
177
180
  "bump to v0.9.213",
178
181
  "bump to v0.9.212",
@@ -194,16 +197,13 @@
194
197
  "add full 4-phase DB Authority roadmap to ARCHITECTURE.md",
195
198
  "update release-notes for v0.9.202 + remove stale lock file",
196
199
  "bump to v0.9.202",
197
- "bump to v0.9.201",
198
- "bump to v0.9.200",
199
- "design orchestration measurement baseline",
200
- "capture tmux hardening path"
200
+ "bump to v0.9.201"
201
201
  ],
202
202
  "migration_notes": []
203
203
  },
204
- "0.9.212": {
205
- "version": "0.9.212",
206
- "date": "2026-06-03",
204
+ "0.9.214": {
205
+ "version": "0.9.214",
206
+ "date": "2026-06-04",
207
207
  "features": [
208
208
  "free license telemetry is mandatory, paid can opt out",
209
209
  "add mcp-sessions CLI — rich status table for running sessions",
@@ -232,6 +232,10 @@
232
232
  "wire update.askexe.com — billing schema + non-fatal image credentials"
233
233
  ],
234
234
  "fixes": [
235
+ "remove failed DB warmup workaround",
236
+ "trace daemon timers and async tmux session checks",
237
+ "add scope comment to DB warmup task query (readiness gate)",
238
+ "add DB warmup at boot+5s to prevent 15s block on first query",
235
239
  "move DB memory count query to slow path — fast path is cache-only",
236
240
  "split agent stats into fast path (60s) + slow path (10m)",
237
241
  "defer agent stats first tick + async file write",
@@ -252,11 +256,7 @@
252
256
  "shard circuit breaker, event loop self-healing, heap cap, intercom reason",
253
257
  "add generate-hook-manifest to tsup entries — unblocks publish gate",
254
258
  "remove unused cleanupExpiredJars import — fixes TS6133 blocking publish",
255
- "remove dead actualRuntime variable — fixes TS6133 blocking publish",
256
- "isolate Metal/GPU ops in worker process — reranker dispose crash was killing daemon",
257
- "remove remaining /exe-intercom invocations + update tests",
258
- "replace /exe-intercom skill invocation with plain text prompt",
259
- "remove ALL --strict-mcp-config usage — was blocking /exe-intercom in session MCP config too"
259
+ "remove dead actualRuntime variable — fixes TS6133 blocking publish"
260
260
  ],
261
261
  "security": [
262
262
  "fix shell injection, SSRF, socket leaks, backup validation",
@@ -273,6 +273,8 @@
273
273
  "fix 4 pricing tier bypass vulnerabilities (audit F1-F4)"
274
274
  ],
275
275
  "other": [
276
+ "bump to v0.9.214",
277
+ "bump to v0.9.213",
276
278
  "bump to v0.9.212",
277
279
  "bump to v0.9.211",
278
280
  "bump to v0.9.210",
@@ -295,14 +297,12 @@
295
297
  "bump to v0.9.201",
296
298
  "bump to v0.9.200",
297
299
  "design orchestration measurement baseline",
298
- "capture tmux hardening path",
299
- "add orchestration counterargument",
300
- "audit tmux orchestration architecture"
300
+ "capture tmux hardening path"
301
301
  ],
302
302
  "migration_notes": []
303
303
  },
304
- "0.9.211": {
305
- "version": "0.9.211",
304
+ "0.9.212": {
305
+ "version": "0.9.212",
306
306
  "date": "2026-06-03",
307
307
  "features": [
308
308
  "free license telemetry is mandatory, paid can opt out",
@@ -332,6 +332,7 @@
332
332
  "wire update.askexe.com — billing schema + non-fatal image credentials"
333
333
  ],
334
334
  "fixes": [
335
+ "move DB memory count query to slow path — fast path is cache-only",
335
336
  "split agent stats into fast path (60s) + slow path (10m)",
336
337
  "defer agent stats first tick + async file write",
337
338
  "Fix daemon agent stats event-loop stalls",
@@ -355,8 +356,7 @@
355
356
  "isolate Metal/GPU ops in worker process — reranker dispose crash was killing daemon",
356
357
  "remove remaining /exe-intercom invocations + update tests",
357
358
  "replace /exe-intercom skill invocation with plain text prompt",
358
- "remove ALL --strict-mcp-config usage — was blocking /exe-intercom in session MCP config too",
359
- "tsup outputs to dist directly — kill dist-next migration shim"
359
+ "remove ALL --strict-mcp-config usage — was blocking /exe-intercom in session MCP config too"
360
360
  ],
361
361
  "security": [
362
362
  "fix shell injection, SSRF, socket leaks, backup validation",
@@ -373,6 +373,7 @@
373
373
  "fix 4 pricing tier bypass vulnerabilities (audit F1-F4)"
374
374
  ],
375
375
  "other": [
376
+ "bump to v0.9.212",
376
377
  "bump to v0.9.211",
377
378
  "bump to v0.9.210",
378
379
  "bump to v0.9.209",
@@ -396,13 +397,12 @@
396
397
  "design orchestration measurement baseline",
397
398
  "capture tmux hardening path",
398
399
  "add orchestration counterargument",
399
- "audit tmux orchestration architecture",
400
- "bump to v0.9.199"
400
+ "audit tmux orchestration architecture"
401
401
  ],
402
402
  "migration_notes": []
403
403
  },
404
- "0.9.210": {
405
- "version": "0.9.210",
404
+ "0.9.211": {
405
+ "version": "0.9.211",
406
406
  "date": "2026-06-03",
407
407
  "features": [
408
408
  "free license telemetry is mandatory, paid can opt out",
@@ -432,6 +432,7 @@
432
432
  "wire update.askexe.com — billing schema + non-fatal image credentials"
433
433
  ],
434
434
  "fixes": [
435
+ "split agent stats into fast path (60s) + slow path (10m)",
435
436
  "defer agent stats first tick + async file write",
436
437
  "Fix daemon agent stats event-loop stalls",
437
438
  "async-ify task re-sync walk + git worktree list in daemon",
@@ -455,8 +456,7 @@
455
456
  "remove remaining /exe-intercom invocations + update tests",
456
457
  "replace /exe-intercom skill invocation with plain text prompt",
457
458
  "remove ALL --strict-mcp-config usage — was blocking /exe-intercom in session MCP config too",
458
- "tsup outputs to dist directly — kill dist-next migration shim",
459
- "drop --strict-mcp-config from lean MCP — was blocking skill loading (/exe-intercom)"
459
+ "tsup outputs to dist directly — kill dist-next migration shim"
460
460
  ],
461
461
  "security": [
462
462
  "fix shell injection, SSRF, socket leaks, backup validation",
@@ -473,6 +473,7 @@
473
473
  "fix 4 pricing tier bypass vulnerabilities (audit F1-F4)"
474
474
  ],
475
475
  "other": [
476
+ "bump to v0.9.211",
476
477
  "bump to v0.9.210",
477
478
  "bump to v0.9.209",
478
479
  "update release-notes.json",
@@ -496,8 +497,7 @@
496
497
  "capture tmux hardening path",
497
498
  "add orchestration counterargument",
498
499
  "audit tmux orchestration architecture",
499
- "bump to v0.9.199",
500
- "remove registry.askexe.com references — fully consolidated to update.askexe.com"
500
+ "bump to v0.9.199"
501
501
  ],
502
502
  "migration_notes": []
503
503
  }
File without changes