copilot-operator 0.1.34 → 0.1.35

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.
Files changed (33) hide show
  1. package/dist/src/api/operator.service.js +30 -1
  2. package/dist/src/cli.js +11 -8
  3. package/dist/src/orchestrator/taskRunner.js +29 -1
  4. package/dist/src/plan/systemGuide.js +24 -0
  5. package/dist/src/transport/copilotTransport.js +47 -18
  6. package/dist/src/transport/locators.js +7 -2
  7. package/dist/src/transport/modelMatch.js +12 -1
  8. package/dist/web/404.html +2 -2
  9. package/dist/web/_next/static/chunks/867-562abd8d5f8c3dc8.js +1 -0
  10. package/dist/web/_next/static/chunks/app/layout-df7bec3acad93f15.js +1 -0
  11. package/dist/web/appearance.html +2 -2
  12. package/dist/web/appearance.txt +10 -10
  13. package/dist/web/defaults.html +2 -2
  14. package/dist/web/defaults.txt +10 -10
  15. package/dist/web/history.html +2 -2
  16. package/dist/web/history.txt +10 -10
  17. package/dist/web/import.html +2 -2
  18. package/dist/web/import.txt +10 -10
  19. package/dist/web/index.html +2 -2
  20. package/dist/web/index.txt +10 -10
  21. package/dist/web/level1.html +2 -2
  22. package/dist/web/level1.txt +10 -10
  23. package/dist/web/presets.html +2 -2
  24. package/dist/web/presets.txt +10 -10
  25. package/dist/web/sessions/view.html +2 -2
  26. package/dist/web/sessions/view.txt +10 -10
  27. package/dist/web/system.html +2 -2
  28. package/dist/web/system.txt +10 -10
  29. package/package.json +2 -1
  30. package/dist/web/_next/static/chunks/867-dfaaa8047cbf2fc2.js +0 -1
  31. package/dist/web/_next/static/chunks/app/layout-3efbb282292ccc38.js +0 -1
  32. /package/dist/web/_next/static/{pfa56tOBq6o-WBQZnyUn2 → k4MMPCGaEGVTHKLfTmYlf}/_buildManifest.js +0 -0
  33. /package/dist/web/_next/static/{pfa56tOBq6o-WBQZnyUn2 → k4MMPCGaEGVTHKLfTmYlf}/_ssgManifest.js +0 -0
@@ -1102,6 +1102,7 @@ let OperatorService = class OperatorService {
1102
1102
  // The page is the source of the model names: Settings and the saved list follow it (see `ModelHooks`).
1103
1103
  models: {
1104
1104
  locate: async (name) => (await this.store.getModels())?.options.find((o) => sameModel(o.name, name))?.locator,
1105
+ askHelp: (ask) => this.askModelHelp(ask, controller.signal),
1105
1106
  renamedDefault: async (which, from, to) => {
1106
1107
  const now = (await this.settings.load()).copilot;
1107
1108
  if (which === 'model' && (now.defaultModel ?? '').trim() === from)
@@ -1866,6 +1867,34 @@ let OperatorService = class OperatorService {
1866
1867
  };
1867
1868
  }
1868
1869
  // --- approvals ------------------------------------------------------------------------
1870
+ /**
1871
+ * Asks the operator to choose the model in the Copilot window, when the runner could not (operator's
1872
+ * request, 2026-10-06). It waits on the approvals card like a held step, in every mode, until it is
1873
+ * answered or the run is stopped.
1874
+ */
1875
+ askModelHelp(ask, signal) {
1876
+ return new Promise((resolveAnswer) => {
1877
+ if (signal.aborted) {
1878
+ resolveAnswer('stop');
1879
+ return;
1880
+ }
1881
+ const approval = {
1882
+ id: newId('a-'),
1883
+ sessionId: ask.sessionId,
1884
+ taskId: '',
1885
+ stepId: 0,
1886
+ description: `Choose "${ask.asked}" in the Copilot window`,
1887
+ createdAt: new Date().toISOString(),
1888
+ model: { asked: ask.asked, shown: ask.shown, why: ask.why, tries: ask.tries },
1889
+ };
1890
+ this.waiting.set(approval.id, {
1891
+ approval,
1892
+ resolve: (d) => resolveAnswer(d.action === 'run' ? 'recheck' : d.action === 'skip' ? 'continue' : 'stop'),
1893
+ });
1894
+ this.bus.publish({ sessionId: ask.sessionId, type: 'approval-requested', level: 'warn',
1895
+ message: `choose "${ask.asked}" in the Copilot window, then answer on the card`, data: { approvalId: approval.id, model: approval.model } });
1896
+ });
1897
+ }
1869
1898
  pendingApprovals(sessionId) {
1870
1899
  return [...this.waiting.values()].map((w) => w.approval).filter((a) => !sessionId || a.sessionId === sessionId);
1871
1900
  }
@@ -1952,7 +1981,7 @@ let OperatorService = class OperatorService {
1952
1981
  if (w.approval.sessionId !== sessionId)
1953
1982
  continue;
1954
1983
  // A fetch waits for its own answer: "run the rest without asking" is not an answer to it.
1955
- if (w.approval.network)
1984
+ if (w.approval.network || w.approval.model)
1956
1985
  continue;
1957
1986
  this.waiting.delete(id);
1958
1987
  w.resolve({ action: 'run' });
package/dist/src/cli.js CHANGED
@@ -195,7 +195,7 @@ program
195
195
  replyTimeoutMs: 60_000,
196
196
  signInTimeoutMs: 15 * 60_000,
197
197
  humanWaitMs: 15 * 60_000,
198
- onEvent: (e, d) => process.stdout.write(` ${e}${d && Object.keys(d).length ? ' ' + JSON.stringify(d) : ''}
198
+ onEvent: (e, d) => process.stdout.write(` ${e}${d && Object.keys(d).length ? ' ' + JSON.stringify(d) : ''}
199
199
  `),
200
200
  });
201
201
  await transport.open();
@@ -383,6 +383,7 @@ program
383
383
  .option('--url <url>', 'chat url', Url.chat)
384
384
  .option('--json', 'print the raw list, for pasting into an issue')
385
385
  .option('--set <name>', 'also switch the chat to this model, by its exact name')
386
+ .option('--steps', 'with --set: print each step of the choice with its time, and keep a picture of each in runs/_models')
386
387
  .action(async (opts) => {
387
388
  const transport = new CopilotTransport({
388
389
  profileDir: opts.profile,
@@ -392,7 +393,9 @@ program
392
393
  headless: false,
393
394
  replyTimeoutMs: 60_000,
394
395
  signInTimeoutMs: 900_000,
395
- onEvent: (e, d) => console.log(` [${e}]${d ? ' ' + JSON.stringify(d) : ''}`),
396
+ // The time of each step, to the millisecond: the pauses between them are what is being looked at.
397
+ onEvent: (e, d) => console.log(` ${new Date().toISOString().slice(11, 23)} [${e}]${d ? ' ' + JSON.stringify(d) : ''}`),
398
+ ...(opts.steps ? { modelStepShots: true } : {}),
396
399
  });
397
400
  try {
398
401
  await transport.open();
@@ -488,14 +491,14 @@ program
488
491
  console.log('');
489
492
  console.log(`task "${done?.title}": ${done?.status} after ${done?.iterations ?? 0} iteration(s)`);
490
493
  if (done?.summary)
491
- console.log(`
492
- Summary:
494
+ console.log(`
495
+ Summary:
493
496
  ${done.summary}`);
494
497
  if (done?.reason)
495
- console.log(`
498
+ console.log(`
496
499
  Reason: ${done.reason}`);
497
500
  if (final?.chat)
498
- console.log(`
501
+ console.log(`
499
502
  chat: ${final.chat.name} — ${final.chat.url}`);
500
503
  if (done?.runId)
501
504
  console.log(`log: ${join(cfg.resolved.runsDir, done.runId, 'task-log.txt')}`);
@@ -515,8 +518,8 @@ program
515
518
  return;
516
519
  }
517
520
  const c = withChat.chat;
518
- console.log(`${c.name}
519
- ${c.url}
521
+ console.log(`${c.name}
522
+ ${c.url}
520
523
  session ${withChat.id}, ${withChat.tasks.length} task(s), created ${c.createdAt}`);
521
524
  });
522
525
  program.parseAsync(process.argv).catch((e) => {
@@ -13,6 +13,7 @@
13
13
  import { createHash } from 'node:crypto';
14
14
  import { readFile, mkdir, writeFile, appendFile } from 'node:fs/promises';
15
15
  import { join, resolve } from 'node:path';
16
+ import { buttonShows } from '../transport/modelMatch.js';
16
17
  import { createTransport, isReplyTimeout } from '../transport/chatTransport.js';
17
18
  import { buildChatName, chatCode, loadPointer, savePointer } from '../transport/chatSession.js';
18
19
  import { parseReply, formatErrorMessage, findLikelyDamage, damageGuidance } from '../protocol/parser.js';
@@ -535,11 +536,36 @@ async function applySessionModel(transport, session, bus, cfg, store, hooks) {
535
536
  if (!wanted)
536
537
  return {};
537
538
  const locator = await hooks?.locate?.(wanted).catch(() => undefined);
538
- const result = await transport.selectModel(wanted, { locator }).catch((e) => ({
539
+ let result = await transport.selectModel(wanted, { locator }).catch((e) => ({
539
540
  ok: false,
540
541
  current: null,
541
542
  reason: e.message,
542
543
  }));
544
+ /*
545
+ * The operator's hand, when the runner could not do it (operator's request, 2026-10-06): the run waits
546
+ * on a card in the UI asking them to choose the model in the Copilot window; "check and go on" reads
547
+ * the picker button again, and asks again while it still shows another model.
548
+ */
549
+ let goOnAsItIs = false;
550
+ for (let tries = 1; !result.ok && hooks?.askHelp; tries += 1) {
551
+ const shown = await transport.currentModel().catch(() => null);
552
+ bus.publish({ sessionId: session.id, type: 'model-help-asked', level: 'warn',
553
+ message: `the chat could not be put on "${wanted}" by the runner; asking the operator to choose it in the Copilot window (picker shows "${shown ?? 'nothing'}")`,
554
+ data: { asked: wanted, shown, why: result.reason ?? '', tries } });
555
+ const answer = await hooks.askHelp({ sessionId: session.id, asked: wanted, shown, why: result.reason ?? 'unknown reason', tries });
556
+ if (answer === 'stop')
557
+ break;
558
+ if (answer === 'continue') {
559
+ goOnAsItIs = true;
560
+ bus.publish({ sessionId: session.id, type: 'model-help-continue', level: 'warn', message: `the operator chose to go on with the model the chat is on ("${shown ?? 'unknown'}"), not "${wanted}"`, data: { asked: wanted, shown } });
561
+ result = { ok: false, current: shown, reason: `the operator chose to go on with "${shown ?? 'unknown'}"` };
562
+ break;
563
+ }
564
+ const now = await transport.currentModel().catch(() => null);
565
+ result = buttonShows(now, wanted)
566
+ ? { ok: true, current: wanted, by: 'hand' }
567
+ : { ok: false, current: now, reason: `the picker still shows "${now ?? 'nothing'}", not "${wanted}"` };
568
+ }
543
569
  const renamed = await followPageModels('model', wanted, result, session, store, hooks, modelFrom);
544
570
  if (renamed)
545
571
  bus.publish({ sessionId: session.id, type: 'model-renamed', level: 'warn', message: renamed, data: { asked: wanted, chosen: result.matched } });
@@ -570,6 +596,8 @@ async function applySessionModel(transport, session, bus, cfg, store, hooks) {
570
596
  * A model the operator chose and the chat is not on is not worked around: the run went on Auto with a
571
597
  * warning nobody saw, and its work was then taken for the chosen model's (2026-10-05). Nothing goes out.
572
598
  */
599
+ if (!result.ok && goOnAsItIs)
600
+ return { current: result.current ?? undefined };
573
601
  if (!result.ok) {
574
602
  return {
575
603
  current: result.current ?? undefined,
@@ -230,6 +230,30 @@ export const SYSTEM_GUIDE = [
230
230
  doesEn: 'Ends the whole task here, aborted; its remaining steps are not run.',
231
231
  doesBg: 'Прекратява цялата задача тук; останалите ѝ стъпки не се изпълняват.',
232
232
  },
233
+ {
234
+ key: 'approval.modelChosen',
235
+ kind: 'button',
236
+ en: 'I chose it — check and continue',
237
+ bg: 'Избрах го — провери и продължи',
238
+ doesEn: 'On the card that appears when the bot could not choose the model: after you chose it in the Copilot window, the bot reads the picker and goes on, or asks again if it shows another model.',
239
+ doesBg: 'На картата, която се появява, когато ботът не успее да избере модела: след като го изберете в прозореца на Copilot, ботът проверява менюто и продължава, или пита пак, ако то показва друг модел.',
240
+ },
241
+ {
242
+ key: 'approval.modelAsItIs',
243
+ kind: 'button',
244
+ en: 'Continue on the model it is on',
245
+ bg: 'Продължи на текущия модел',
246
+ doesEn: 'The run goes on with whatever model the chat is on, and the record says so.',
247
+ doesBg: 'Изпълнението продължава с модела, на който е чатът, и записът го казва.',
248
+ },
249
+ {
250
+ key: 'approval.modelStop',
251
+ kind: 'button',
252
+ en: 'Stop',
253
+ bg: 'Спри',
254
+ doesEn: 'Nothing is sent: the session stops, its tasks stay queued.',
255
+ doesBg: 'Нищо не се изпраща: сесията спира, задачите ѝ остават на опашката.',
256
+ },
233
257
  ],
234
258
  },
235
259
  ],
@@ -940,31 +940,60 @@ Current URL: ${url}`);
940
940
  const textOf = async (el) => (((await el.innerText().catch(() => '')) ?? '').split('\n')[0] ?? '').trim();
941
941
  // A fixed pause after every opening and every press (see `ModelPicking`); the checks give it less.
942
942
  const settle = () => this.p.waitForTimeout(this.opts.modelSettleMs ?? ModelPicking.settleMs);
943
- // And a fixed pause before every press in the picker: the button, the group, the model (2026-10-06).
944
- const beforePress = () => this.p.waitForTimeout(this.opts.modelBeforePressMs ?? ModelPicking.beforePressMs);
943
+ const pause = this.opts.modelBeforePressMs ?? ModelPicking.beforePressMs;
944
+ const poll = this.opts.modelPollMs ?? ModelPicking.pollMs;
945
945
  const appear = this.opts.modelAppearMs ?? ModelPicking.appearMs;
946
- /** Waits until the element is there and visible. */
947
- const present = async (el) => await el.waitFor({ state: 'visible', timeout: appear }).then(() => true).catch(() => false);
946
+ let shot = 0;
947
+ /** With `modelStepShots`, a picture and the menu's HTML at each step, numbered, beside the transport's files. */
948
+ const picture = async (label) => {
949
+ if (!this.opts.modelStepShots)
950
+ return;
951
+ shot += 1;
952
+ await this.captureMenu(`step-${String(shot).padStart(2, '0')}-${label.replace(/[^A-Za-z0-9._-]+/g, '-').slice(0, 40)}`, await this.readMenuRows().catch(() => [])).catch(() => undefined);
953
+ };
954
+ /*
955
+ * The operator's rhythm for every element of the picker (2026-10-06): look for it; while it is not
956
+ * there, wait two seconds and look again; once it is there, wait two seconds more, then press it.
957
+ * Each look and each pause is in the record with its time, so the pauses can be seen.
958
+ */
959
+ const waitThenFind = async (label, find) => {
960
+ const deadline = Date.now() + appear;
961
+ let looks = 1;
962
+ let el = await find();
963
+ while (!el && Date.now() < deadline) {
964
+ this.emit('model-step', { step: 'not there yet, waiting', what: label, look: looks, waitMs: poll });
965
+ await this.p.waitForTimeout(poll);
966
+ looks += 1;
967
+ el = await find();
968
+ }
969
+ if (!el) {
970
+ this.emit('model-step', { step: 'never appeared', what: label, looks });
971
+ return null;
972
+ }
973
+ this.emit('model-step', { step: 'there, pausing before the press', what: label, look: looks, text: await textOf(el), pauseMs: pause });
974
+ await this.p.waitForTimeout(pause);
975
+ await picture(`before-${label}`);
976
+ return el;
977
+ };
978
+ const visible = async (el) => (el && (await el.isVisible().catch(() => false)) ? el : null);
948
979
  const reach = async () => {
949
- const button = await this.resolveModelButton();
980
+ const button = await waitThenFind('the picker button', async () => visible(await this.resolveModelButton(1_000)));
950
981
  if (!button)
951
982
  return { problem: 'This chat does not show a model picker.' };
952
- await beforePress();
953
- await button.click();
983
+ await button.click({ timeout: 5_000 }).catch(() => undefined);
954
984
  await settle();
955
985
  if (!(await this.waitForPopup()))
956
986
  return { problem: 'The model picker did not open.' };
957
987
  this.emit('model-step', { step: 'picker opened' });
958
988
  if (target.group) {
959
- const group = await this.rowByXPath(target.group.xpath, target.group.name, appear);
960
- if (!group || !(await present(group)))
989
+ const group = await waitThenFind(`the "${target.group.name}" group`, () => this.rowByXPath(target.group.xpath, target.group.name, 0));
990
+ if (!group)
961
991
  return { problem: `the "${target.group.name}" row was not found by ${target.group.xpath}` };
962
- this.emit('model-step', { step: 'group found', text: await textOf(group) });
963
992
  /*
964
993
  * Opened without the mouse first: a mouse click goes to coordinates, and the picker moves while it
965
994
  * opens, so on the work machine a press meant for "GPT" (now second) opened "Claude" (now first)
966
995
  * (2026-10-06). A click sent to the element itself cannot land on another row; then the keyboard
967
- * (focus, ArrowRight opens a submenu); the mouse only last. Each time, its model must be on screen.
996
+ * (focus, ArrowRight opens a submenu); the mouse only last. Each time, its model must appear.
968
997
  */
969
998
  const ways = [
970
999
  ['click on the element', async () => { await group.evaluate((el) => el.click(), undefined, { timeout: 3_000 }); }],
@@ -973,21 +1002,21 @@ Current URL: ${url}`);
973
1002
  ['mouse click', async () => { await group.click({ timeout: 3_000 }); }],
974
1003
  ];
975
1004
  for (const [how, act] of ways) {
976
- await beforePress();
977
1005
  await act().catch(() => undefined);
978
1006
  await settle();
979
- const row = await this.rowByXPath(target.xpath, target.model, appear);
980
- if (row && (await present(row))) {
1007
+ const row = await waitThenFind(`"${target.model}"`, () => this.rowByXPath(target.xpath, target.model, 0));
1008
+ if (row) {
981
1009
  this.emit('model-step', { step: 'group opened', how, model: await textOf(row) });
982
1010
  return { row };
983
1011
  }
984
1012
  this.emit('model-step', { step: 'group not opened', how });
1013
+ await this.p.waitForTimeout(pause);
985
1014
  }
986
1015
  await this.captureMenu('select-failed', await this.readMenuRows().catch(() => [])).catch(() => undefined);
987
1016
  return { problem: `"${target.model}" did not appear after opening "${target.group.name}" every way (${target.xpath}); the menu is kept as models-select-failed.html/.png` };
988
1017
  }
989
- const row = await this.rowByXPath(target.xpath, target.model, appear);
990
- if (!row || !(await present(row))) {
1018
+ const row = await waitThenFind(`"${target.model}"`, () => this.rowByXPath(target.xpath, target.model, 0));
1019
+ if (!row) {
991
1020
  await this.captureMenu('select-failed', await this.readMenuRows().catch(() => [])).catch(() => undefined);
992
1021
  return { problem: `"${target.model}" was not found by ${target.xpath}; the menu is kept as models-select-failed.html/.png` };
993
1022
  }
@@ -1017,14 +1046,14 @@ Current URL: ${url}`);
1017
1046
  }
1018
1047
  // On the element itself, for the same reason as the group; the mouse only when that does nothing.
1019
1048
  this.emit('model-step', { step: 'model pressed', attempt, text: await textOf(found.row) });
1020
- await beforePress();
1021
1049
  await found.row.evaluate((el) => el.click(), undefined, { timeout: 3_000 }).catch(() => undefined);
1022
1050
  await settle();
1023
1051
  if ((await this.modelMenuOpen()) && !(await checked(found.row))) {
1024
- await beforePress();
1052
+ await this.p.waitForTimeout(pause);
1025
1053
  await found.row.click({ timeout: 3_000 }).catch(() => undefined);
1026
1054
  await settle();
1027
1055
  }
1056
+ await picture('after-press');
1028
1057
  await this.closeMenu();
1029
1058
  await settle();
1030
1059
  /*
@@ -167,10 +167,15 @@ export const OperatorModelLocators = {
167
167
  */
168
168
  export const ModelPicking = {
169
169
  attempts: 6,
170
- /** A fixed pause before every press in the picker: the button, the group, the model (2026-10-06: 2 s). */
170
+ /**
171
+ * The operator's rhythm (2026-10-06): an element of the picker is looked for; while it is not there the
172
+ * runner waits `pollMs` and looks again, up to `appearMs`; once it is there it waits `beforePressMs`
173
+ * more, then presses it.
174
+ */
175
+ pollMs: 2_000,
171
176
  beforePressMs: 2_000,
172
177
  settleMs: 1_500,
173
- appearMs: 10_000,
178
+ appearMs: 20_000,
174
179
  };
175
180
  /** A text as an XPath string literal, whatever quotes it holds. */
176
181
  export function xpathText(text) {
@@ -19,7 +19,18 @@ export function buttonShows(shown, asked) {
19
19
  return false;
20
20
  const s = normModel(shown);
21
21
  const a = normModel(asked);
22
- return s.length > 0 && (s === a || a.startsWith(`${s} `));
22
+ if (s.length === 0)
23
+ return false;
24
+ if (s === a)
25
+ return true;
26
+ /*
27
+ * The button drops the last word ("GPT-5.6 Sol Think deeper" reads "GPT-5.6 Sol Think"), no more: a
28
+ * shorter start — "GPT" alone — would agree with every model of the group, and a run would take the
29
+ * chat for set and choose nothing (2026-10-06).
30
+ */
31
+ const sw = s.split(' ');
32
+ const aw = a.split(' ');
33
+ return sw.length >= aw.length - 1 && aw.length > 1 && a.startsWith(`${s} `);
23
34
  }
24
35
  const words = (name) => normModel(name).split(' ').filter(Boolean);
25
36
  const isVersion = (w) => /^v?\d+(?:\.\d+)*$/.test(w);
package/dist/web/404.html CHANGED
@@ -1,4 +1,4 @@
1
- <!DOCTYPE html><!--pfa56tOBq6o_WBQZnyUn2--><html lang="en" data-theme="light" data-textsize="normal" data-contrast="normal" data-motion="normal" data-links="plain" data-focus="normal"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="/_next/static/css/c37978b44194c37b.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-0f31b926d9a9c5a4.js"/><script src="/_next/static/chunks/c7879cf7-b5ab1053c1d9a2e7.js" async=""></script><script src="/_next/static/chunks/131-bae98f790a541679.js" async=""></script><script src="/_next/static/chunks/main-app-e3a5f713ba31557e.js" async=""></script><script src="/_next/static/chunks/197-f7c33a0114fc3db3.js" async=""></script><script src="/_next/static/chunks/867-dfaaa8047cbf2fc2.js" async=""></script><script src="/_next/static/chunks/549-7e35e4fdefadb05d.js" async=""></script><script src="/_next/static/chunks/app/layout-3efbb282292ccc38.js" async=""></script><meta name="robots" content="noindex"/><title>404: This page could not be found.</title><title>copilot-operator</title><meta name="description" content="Runs task loops with Microsoft 365 Copilot on this machine."/><script>
1
+ <!DOCTYPE html><!--k4MMPCGaEGVTHKLfTmYlf--><html lang="en" data-theme="light" data-textsize="normal" data-contrast="normal" data-motion="normal" data-links="plain" data-focus="normal"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="/_next/static/css/c37978b44194c37b.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-0f31b926d9a9c5a4.js"/><script src="/_next/static/chunks/c7879cf7-b5ab1053c1d9a2e7.js" async=""></script><script src="/_next/static/chunks/131-bae98f790a541679.js" async=""></script><script src="/_next/static/chunks/main-app-e3a5f713ba31557e.js" async=""></script><script src="/_next/static/chunks/197-f7c33a0114fc3db3.js" async=""></script><script src="/_next/static/chunks/867-562abd8d5f8c3dc8.js" async=""></script><script src="/_next/static/chunks/549-7e35e4fdefadb05d.js" async=""></script><script src="/_next/static/chunks/app/layout-df7bec3acad93f15.js" async=""></script><meta name="robots" content="noindex"/><title>404: This page could not be found.</title><title>copilot-operator</title><meta name="description" content="Runs task loops with Microsoft 365 Copilot on this machine."/><script>
2
2
  (function () {
3
3
  try {
4
4
  var d = document.documentElement;
@@ -13,4 +13,4 @@
13
13
  d.dataset.focus = a.strongFocus ? 'strong' : 'normal';
14
14
  } catch (e) {}
15
15
  })();
16
- </script><script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body><div hidden=""><!--$--><!--/$--></div><a class="skip-link" href="#main">Skip to the content</a><div class="wrap"><header class="top"><h1><a href="/">copilot-operator</a></h1><nav aria-label="Main"><a href="/"><svg class="nav-icon" viewBox="0 0 24 24" width="16" height="16" fill="currentColor" aria-hidden="true"><path d="M4 5h16v4H4zM4 11h16v4H4zM4 17h10v2H4z"></path></svg><span>Sessions</span></a><a href="/defaults"><svg class="nav-icon" viewBox="0 0 24 24" width="16" height="16" fill="currentColor" aria-hidden="true"><path d="M12 8a4 4 0 1 0 0 8 4 4 0 0 0 0-8zm8.5 4 1.5 1-1.6 2.8-1.8-.4a7 7 0 0 1-1.5 1.5l.4 1.8L14.7 21l-1-1.5a7 7 0 0 1-3.4 0l-1 1.5-2.8-1.6.4-1.8A7 7 0 0 1 5.4 16l-1.8.4L2 13.6 3.5 12.6V11.4L2 10.4l1.6-2.8 1.8.4A7 7 0 0 1 6.9 6.5l-.4-1.8L9.3 3l1 1.5a7 7 0 0 1 3.4 0l1-1.5 2.8 1.6-.4 1.8a7 7 0 0 1 1.5 1.5l1.8-.4L22 10.4l-1.5 1z"></path></svg><span>Settings</span></a><a href="/import"><svg class="nav-icon" viewBox="0 0 24 24" width="16" height="16" fill="currentColor" aria-hidden="true"><path d="M12 3v10m0 0 4-4m-4 4-4-4M4 15v4a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-4" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"></path></svg><span>Plan from JSON</span></a><a href="/history"><svg class="nav-icon" viewBox="0 0 24 24" width="16" height="16" fill="currentColor" aria-hidden="true"><path d="M12 3a9 9 0 1 0 8.5 6M12 7v5l3 2M3 4v5h5" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"></path></svg><span>Task register</span></a><a href="/level1"><svg class="nav-icon" viewBox="0 0 24 24" width="16" height="16" fill="currentColor" aria-hidden="true"><path d="M6 3h9l5 5v13H6zM14 3v6h6M9 13h7M9 17h7" fill="none" stroke="currentColor" stroke-width="2" stroke-linejoin="round"></path></svg><span>Level 1 prompt</span></a><a href="/presets"><svg class="nav-icon" viewBox="0 0 24 24" width="16" height="16" fill="currentColor" aria-hidden="true"><path d="M5 4h14v4H5zM5 10h14v4H5zM5 16h9v4H5z" fill="none" stroke="currentColor" stroke-width="2" stroke-linejoin="round"></path></svg><span>Level 2 presets</span></a><a href="/appearance"><svg class="nav-icon" viewBox="0 0 24 24" width="16" height="16" fill="currentColor" aria-hidden="true"><path d="M12 3a9 9 0 0 0 0 18c1.5 0 2-1 2-2s-1-1.5-1-2.5S14 15 15.5 15H17a4 4 0 0 0 4-4 8 8 0 0 0-9-8zM8 9a1 1 0 1 0 0 2 1 1 0 0 0 0-2zm4-3a1 1 0 1 0 0 2 1 1 0 0 0 0-2zm4 3a1 1 0 1 0 0 2 1 1 0 0 0 0-2z"></path></svg><span>Appearance</span></a><a href="/system"><svg class="nav-icon" viewBox="0 0 24 24" width="16" height="16" fill="currentColor" aria-hidden="true"><path d="M4 5h16v10H4zM2 19h20M9 15v4M15 15v4" fill="none" stroke="currentColor" stroke-width="2" stroke-linejoin="round"></path></svg><span>System</span></a><select aria-label="Language" style="width:auto"><option value="en" selected="">English</option><option value="bg">Български</option></select></nav></header><main id="main"><div style="font-family:system-ui,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sans-serif,&quot;Apple Color Emoji&quot;,&quot;Segoe UI Emoji&quot;;height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding:0 23px 0 0;font-size:24px;font-weight:500;vertical-align:top;line-height:49px">404</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:49px;margin:0">This page could not be found.</h2></div></div></div><!--$--><!--/$--></main></div><script src="/_next/static/chunks/webpack-0f31b926d9a9c5a4.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[8078,[\"197\",\"static/chunks/197-f7c33a0114fc3db3.js\",\"867\",\"static/chunks/867-dfaaa8047cbf2fc2.js\",\"549\",\"static/chunks/549-7e35e4fdefadb05d.js\",\"177\",\"static/chunks/app/layout-3efbb282292ccc38.js\"],\"AppearanceProvider\"]\n3:I[867,[\"197\",\"static/chunks/197-f7c33a0114fc3db3.js\",\"867\",\"static/chunks/867-dfaaa8047cbf2fc2.js\",\"549\",\"static/chunks/549-7e35e4fdefadb05d.js\",\"177\",\"static/chunks/app/layout-3efbb282292ccc38.js\"],\"LanguageProvider\"]\n4:I[1035,[\"197\",\"static/chunks/197-f7c33a0114fc3db3.js\",\"867\",\"static/chunks/867-dfaaa8047cbf2fc2.js\",\"549\",\"static/chunks/549-7e35e4fdefadb05d.js\",\"177\",\"static/chunks/app/layout-3efbb282292ccc38.js\"],\"DialogHost\"]\n5:I[8214,[\"197\",\"static/chunks/197-f7c33a0114fc3db3.js\",\"867\",\"static/chunks/867-dfaaa8047cbf2fc2.js\",\"549\",\"static/chunks/549-7e35e4fdefadb05d.js\",\"177\",\"static/chunks/app/layout-3efbb282292ccc38.js\"],\"SkipLink\"]\n6:I[8197,[\"197\",\"static/chunks/197-f7c33a0114fc3db3.js\",\"867\",\"static/chunks/867-dfaaa8047cbf2fc2.js\",\"549\",\"static/chunks/549-7e35e4fdefadb05d.js\",\"177\",\"static/chunks/app/layout-3efbb282292ccc38.js\"],\"\"]\n7:I[8214,[\"197\",\"static/chunks/197-f7c33a0114fc3db3.js\",\"867\",\"static/chunks/867-dfaaa8047cbf2fc2.js\",\"549\",\"static/chunks/549-7e35e4fdefadb05d.js\",\"177\",\"static/chunks/app/layout-3efbb282292ccc38.js\"],\"Nav\"]\n8:I[6657,[\"197\",\"static/chunks/197-f7c33a0114fc3db3.js\",\"867\",\"static/chunks/867-dfaaa8047cbf2fc2.js\",\"549\",\"static/chunks/549-7e35e4fdefadb05d.js\",\"177\",\"static/chunks/app/layout-3efbb282292ccc38.js\"],\"GlobalApprovals\"]\n9:I[5204,[],\"\"]\na:I[2642,[],\"\"]\nb:I[7712,[\"197\",\"static/chunks/197-f7c33a0114fc3db3.js\",\"867\",\"static/chunks/867-dfaaa8047cbf2fc2.js\",\"549\",\"static/chunks/549-7e35e4fdefadb05d.js\",\"177\",\"static/chunks/app/layout-3efbb282292ccc38.js\"],\"ScrollJump\"]\nc:I[433,[],\"OutletBoundary\"]\ne:I[9884,[],\"AsyncMetadataOutlet\"]\n10:I[433,[],\"ViewportBoundary\"]\n12:I[433,[],\"MetadataBoundary\"]\n13:\"$Sreact.suspense\"\n15:I[3536,[],\"\"]\n:HL[\"/_next/static/css/c37978b44194c37b.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"b\":\"pfa56tOBq6o-WBQZnyUn2\",\"p\":\"\",\"c\":[\"\",\"_not-found\"],\"i\":false,\"f\":[[[\"\",{\"children\":[\"/_not-found\",{\"children\":[\"__PAGE__\",{}]}]},\"$undefined\",\"$undefined\",true],[\"\",[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/c37978b44194c37b.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"suppressHydrationWarning\":true,\"data-theme\":\"light\",\"data-textsize\":\"normal\",\"data-contrast\":\"normal\",\"data-motion\":\"normal\",\"data-links\":\"plain\",\"data-focus\":\"normal\",\"children\":[[\"$\",\"head\",null,{\"children\":[\"$\",\"script\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"\\n(function () {\\n try {\\n var d = document.documentElement;\\n var raw = localStorage.getItem('cop.appearance');\\n var a = raw ? JSON.parse(raw) : {};\\n if (!a || typeof a !== 'object') a = {};\\n d.dataset.theme = a.theme === 'dark' ? 'dark' : 'light';\\n d.dataset.textsize = [\\\"small\\\",\\\"normal\\\",\\\"large\\\",\\\"huge\\\",\\\"giant\\\"].indexOf(a.textSize) \u003e= 0 ? a.textSize : 'normal';\\n d.dataset.contrast = a.highContrast ? 'high' : 'normal';\\n d.dataset.motion = a.reduceMotion ? 'reduced' : 'normal';\\n d.dataset.links = a.underlineLinks ? 'underline' : 'plain';\\n d.dataset.focus = a.strongFocus ? 'strong' : 'normal';\\n } catch (e) {}\\n})();\\n\"}}]}],[\"$\",\"body\",null,{\"children\":[\"$\",\"$L2\",null,{\"children\":[\"$\",\"$L3\",null,{\"children\":[\"$\",\"$L4\",null,{\"children\":[[\"$\",\"$L5\",null,{}],[\"$\",\"div\",null,{\"className\":\"wrap\",\"children\":[[\"$\",\"header\",null,{\"className\":\"top\",\"children\":[[\"$\",\"h1\",null,{\"children\":[\"$\",\"$L6\",null,{\"href\":\"/\",\"children\":\"copilot-operator\"}]}],[\"$\",\"$L7\",null,{}]]}],[\"$\",\"$L8\",null,{}],[\"$\",\"main\",null,{\"id\":\"main\",\"children\":[\"$\",\"$L9\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$La\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}]]}],[\"$\",\"$Lb\",null,{}]]}]}]}]}]]}]]}],{\"children\":[\"/_not-found\",[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L9\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$La\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[\"__PAGE__\",[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":404}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],null,[\"$\",\"$Lc\",null,{\"children\":[\"$Ld\",[\"$\",\"$Le\",null,{\"promise\":\"$@f\"}]]}]]}],{},null,false]},null,false]},null,false],[\"$\",\"$1\",\"h\",{\"children\":[[\"$\",\"meta\",null,{\"name\":\"robots\",\"content\":\"noindex\"}],[[\"$\",\"$L10\",null,{\"children\":\"$L11\"}],null],[\"$\",\"$L12\",null,{\"children\":[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$13\",null,{\"fallback\":null,\"children\":\"$L14\"}]}]}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$15\",[]],\"s\":false,\"S\":true}\n"])</script><script>self.__next_f.push([1,"11:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\nd:null\n"])</script><script>self.__next_f.push([1,"f:{\"metadata\":[[\"$\",\"title\",\"0\",{\"children\":\"copilot-operator\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"Runs task loops with Microsoft 365 Copilot on this machine.\"}]],\"error\":null,\"digest\":\"$undefined\"}\n"])</script><script>self.__next_f.push([1,"14:\"$f:metadata\"\n"])</script></body></html>
16
+ </script><script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body><div hidden=""><!--$--><!--/$--></div><a class="skip-link" href="#main">Skip to the content</a><div class="wrap"><header class="top"><h1><a href="/">copilot-operator</a></h1><nav aria-label="Main"><a href="/"><svg class="nav-icon" viewBox="0 0 24 24" width="16" height="16" fill="currentColor" aria-hidden="true"><path d="M4 5h16v4H4zM4 11h16v4H4zM4 17h10v2H4z"></path></svg><span>Sessions</span></a><a href="/defaults"><svg class="nav-icon" viewBox="0 0 24 24" width="16" height="16" fill="currentColor" aria-hidden="true"><path d="M12 8a4 4 0 1 0 0 8 4 4 0 0 0 0-8zm8.5 4 1.5 1-1.6 2.8-1.8-.4a7 7 0 0 1-1.5 1.5l.4 1.8L14.7 21l-1-1.5a7 7 0 0 1-3.4 0l-1 1.5-2.8-1.6.4-1.8A7 7 0 0 1 5.4 16l-1.8.4L2 13.6 3.5 12.6V11.4L2 10.4l1.6-2.8 1.8.4A7 7 0 0 1 6.9 6.5l-.4-1.8L9.3 3l1 1.5a7 7 0 0 1 3.4 0l1-1.5 2.8 1.6-.4 1.8a7 7 0 0 1 1.5 1.5l1.8-.4L22 10.4l-1.5 1z"></path></svg><span>Settings</span></a><a href="/import"><svg class="nav-icon" viewBox="0 0 24 24" width="16" height="16" fill="currentColor" aria-hidden="true"><path d="M12 3v10m0 0 4-4m-4 4-4-4M4 15v4a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-4" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"></path></svg><span>Plan from JSON</span></a><a href="/history"><svg class="nav-icon" viewBox="0 0 24 24" width="16" height="16" fill="currentColor" aria-hidden="true"><path d="M12 3a9 9 0 1 0 8.5 6M12 7v5l3 2M3 4v5h5" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"></path></svg><span>Task register</span></a><a href="/level1"><svg class="nav-icon" viewBox="0 0 24 24" width="16" height="16" fill="currentColor" aria-hidden="true"><path d="M6 3h9l5 5v13H6zM14 3v6h6M9 13h7M9 17h7" fill="none" stroke="currentColor" stroke-width="2" stroke-linejoin="round"></path></svg><span>Level 1 prompt</span></a><a href="/presets"><svg class="nav-icon" viewBox="0 0 24 24" width="16" height="16" fill="currentColor" aria-hidden="true"><path d="M5 4h14v4H5zM5 10h14v4H5zM5 16h9v4H5z" fill="none" stroke="currentColor" stroke-width="2" stroke-linejoin="round"></path></svg><span>Level 2 presets</span></a><a href="/appearance"><svg class="nav-icon" viewBox="0 0 24 24" width="16" height="16" fill="currentColor" aria-hidden="true"><path d="M12 3a9 9 0 0 0 0 18c1.5 0 2-1 2-2s-1-1.5-1-2.5S14 15 15.5 15H17a4 4 0 0 0 4-4 8 8 0 0 0-9-8zM8 9a1 1 0 1 0 0 2 1 1 0 0 0 0-2zm4-3a1 1 0 1 0 0 2 1 1 0 0 0 0-2zm4 3a1 1 0 1 0 0 2 1 1 0 0 0 0-2z"></path></svg><span>Appearance</span></a><a href="/system"><svg class="nav-icon" viewBox="0 0 24 24" width="16" height="16" fill="currentColor" aria-hidden="true"><path d="M4 5h16v10H4zM2 19h20M9 15v4M15 15v4" fill="none" stroke="currentColor" stroke-width="2" stroke-linejoin="round"></path></svg><span>System</span></a><select aria-label="Language" style="width:auto"><option value="en" selected="">English</option><option value="bg">Български</option></select></nav></header><main id="main"><div style="font-family:system-ui,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sans-serif,&quot;Apple Color Emoji&quot;,&quot;Segoe UI Emoji&quot;;height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding:0 23px 0 0;font-size:24px;font-weight:500;vertical-align:top;line-height:49px">404</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:49px;margin:0">This page could not be found.</h2></div></div></div><!--$--><!--/$--></main></div><script src="/_next/static/chunks/webpack-0f31b926d9a9c5a4.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[8078,[\"197\",\"static/chunks/197-f7c33a0114fc3db3.js\",\"867\",\"static/chunks/867-562abd8d5f8c3dc8.js\",\"549\",\"static/chunks/549-7e35e4fdefadb05d.js\",\"177\",\"static/chunks/app/layout-df7bec3acad93f15.js\"],\"AppearanceProvider\"]\n3:I[867,[\"197\",\"static/chunks/197-f7c33a0114fc3db3.js\",\"867\",\"static/chunks/867-562abd8d5f8c3dc8.js\",\"549\",\"static/chunks/549-7e35e4fdefadb05d.js\",\"177\",\"static/chunks/app/layout-df7bec3acad93f15.js\"],\"LanguageProvider\"]\n4:I[1035,[\"197\",\"static/chunks/197-f7c33a0114fc3db3.js\",\"867\",\"static/chunks/867-562abd8d5f8c3dc8.js\",\"549\",\"static/chunks/549-7e35e4fdefadb05d.js\",\"177\",\"static/chunks/app/layout-df7bec3acad93f15.js\"],\"DialogHost\"]\n5:I[8214,[\"197\",\"static/chunks/197-f7c33a0114fc3db3.js\",\"867\",\"static/chunks/867-562abd8d5f8c3dc8.js\",\"549\",\"static/chunks/549-7e35e4fdefadb05d.js\",\"177\",\"static/chunks/app/layout-df7bec3acad93f15.js\"],\"SkipLink\"]\n6:I[8197,[\"197\",\"static/chunks/197-f7c33a0114fc3db3.js\",\"867\",\"static/chunks/867-562abd8d5f8c3dc8.js\",\"549\",\"static/chunks/549-7e35e4fdefadb05d.js\",\"177\",\"static/chunks/app/layout-df7bec3acad93f15.js\"],\"\"]\n7:I[8214,[\"197\",\"static/chunks/197-f7c33a0114fc3db3.js\",\"867\",\"static/chunks/867-562abd8d5f8c3dc8.js\",\"549\",\"static/chunks/549-7e35e4fdefadb05d.js\",\"177\",\"static/chunks/app/layout-df7bec3acad93f15.js\"],\"Nav\"]\n8:I[6657,[\"197\",\"static/chunks/197-f7c33a0114fc3db3.js\",\"867\",\"static/chunks/867-562abd8d5f8c3dc8.js\",\"549\",\"static/chunks/549-7e35e4fdefadb05d.js\",\"177\",\"static/chunks/app/layout-df7bec3acad93f15.js\"],\"GlobalApprovals\"]\n9:I[5204,[],\"\"]\na:I[2642,[],\"\"]\nb:I[7712,[\"197\",\"static/chunks/197-f7c33a0114fc3db3.js\",\"867\",\"static/chunks/867-562abd8d5f8c3dc8.js\",\"549\",\"static/chunks/549-7e35e4fdefadb05d.js\",\"177\",\"static/chunks/app/layout-df7bec3acad93f15.js\"],\"ScrollJump\"]\nc:I[433,[],\"OutletBoundary\"]\ne:I[9884,[],\"AsyncMetadataOutlet\"]\n10:I[433,[],\"ViewportBoundary\"]\n12:I[433,[],\"MetadataBoundary\"]\n13:\"$Sreact.suspense\"\n15:I[3536,[],\"\"]\n:HL[\"/_next/static/css/c37978b44194c37b.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"b\":\"k4MMPCGaEGVTHKLfTmYlf\",\"p\":\"\",\"c\":[\"\",\"_not-found\"],\"i\":false,\"f\":[[[\"\",{\"children\":[\"/_not-found\",{\"children\":[\"__PAGE__\",{}]}]},\"$undefined\",\"$undefined\",true],[\"\",[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/c37978b44194c37b.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"suppressHydrationWarning\":true,\"data-theme\":\"light\",\"data-textsize\":\"normal\",\"data-contrast\":\"normal\",\"data-motion\":\"normal\",\"data-links\":\"plain\",\"data-focus\":\"normal\",\"children\":[[\"$\",\"head\",null,{\"children\":[\"$\",\"script\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"\\n(function () {\\n try {\\n var d = document.documentElement;\\n var raw = localStorage.getItem('cop.appearance');\\n var a = raw ? JSON.parse(raw) : {};\\n if (!a || typeof a !== 'object') a = {};\\n d.dataset.theme = a.theme === 'dark' ? 'dark' : 'light';\\n d.dataset.textsize = [\\\"small\\\",\\\"normal\\\",\\\"large\\\",\\\"huge\\\",\\\"giant\\\"].indexOf(a.textSize) \u003e= 0 ? a.textSize : 'normal';\\n d.dataset.contrast = a.highContrast ? 'high' : 'normal';\\n d.dataset.motion = a.reduceMotion ? 'reduced' : 'normal';\\n d.dataset.links = a.underlineLinks ? 'underline' : 'plain';\\n d.dataset.focus = a.strongFocus ? 'strong' : 'normal';\\n } catch (e) {}\\n})();\\n\"}}]}],[\"$\",\"body\",null,{\"children\":[\"$\",\"$L2\",null,{\"children\":[\"$\",\"$L3\",null,{\"children\":[\"$\",\"$L4\",null,{\"children\":[[\"$\",\"$L5\",null,{}],[\"$\",\"div\",null,{\"className\":\"wrap\",\"children\":[[\"$\",\"header\",null,{\"className\":\"top\",\"children\":[[\"$\",\"h1\",null,{\"children\":[\"$\",\"$L6\",null,{\"href\":\"/\",\"children\":\"copilot-operator\"}]}],[\"$\",\"$L7\",null,{}]]}],[\"$\",\"$L8\",null,{}],[\"$\",\"main\",null,{\"id\":\"main\",\"children\":[\"$\",\"$L9\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$La\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}]]}],[\"$\",\"$Lb\",null,{}]]}]}]}]}]]}]]}],{\"children\":[\"/_not-found\",[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L9\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$La\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[\"__PAGE__\",[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":404}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],null,[\"$\",\"$Lc\",null,{\"children\":[\"$Ld\",[\"$\",\"$Le\",null,{\"promise\":\"$@f\"}]]}]]}],{},null,false]},null,false]},null,false],[\"$\",\"$1\",\"h\",{\"children\":[[\"$\",\"meta\",null,{\"name\":\"robots\",\"content\":\"noindex\"}],[[\"$\",\"$L10\",null,{\"children\":\"$L11\"}],null],[\"$\",\"$L12\",null,{\"children\":[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$13\",null,{\"fallback\":null,\"children\":\"$L14\"}]}]}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$15\",[]],\"s\":false,\"S\":true}\n"])</script><script>self.__next_f.push([1,"11:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\nd:null\n"])</script><script>self.__next_f.push([1,"f:{\"metadata\":[[\"$\",\"title\",\"0\",{\"children\":\"copilot-operator\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"Runs task loops with Microsoft 365 Copilot on this machine.\"}]],\"error\":null,\"digest\":\"$undefined\"}\n"])</script><script>self.__next_f.push([1,"14:\"$f:metadata\"\n"])</script></body></html>