copilot-operator 0.1.12 → 0.1.13
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/dist/src/api/operator.service.js +34 -2
- package/dist/src/context/desktopMirror.js +39 -1
- package/dist/src/orchestrator/taskRunner.js +24 -5
- package/dist/src/plan/brief.js +19 -0
- package/dist/src/plan/importPlan.js +3 -0
- package/dist/src/plan/schema.js +26 -2
- package/dist/src/plan/script.js +79 -75
- package/dist/src/plan/systemGuide.js +37 -5
- package/dist/src/session/exports.js +3 -0
- package/dist/src/vcs/git.js +77 -2
- package/dist/src/vcs/taskVcs.js +71 -13
- package/dist/web/404.html +2 -2
- package/dist/web/_next/static/chunks/867-84c19f047972ffc3.js +1 -0
- package/dist/web/_next/static/chunks/app/history/page-d7314ac22d47a3ab.js +1 -0
- package/dist/web/_next/static/chunks/app/sessions/view/page-34d7988849f9aa76.js +1 -0
- package/dist/web/appearance.html +2 -2
- package/dist/web/appearance.txt +11 -11
- package/dist/web/defaults.html +2 -2
- package/dist/web/defaults.txt +11 -11
- package/dist/web/history.html +2 -2
- package/dist/web/history.txt +11 -11
- package/dist/web/import.html +2 -2
- package/dist/web/import.txt +11 -11
- package/dist/web/index.html +2 -2
- package/dist/web/index.txt +11 -11
- package/dist/web/level1.html +2 -2
- package/dist/web/level1.txt +11 -11
- package/dist/web/presets.html +2 -2
- package/dist/web/presets.txt +11 -11
- package/dist/web/sessions/view.html +2 -2
- package/dist/web/sessions/view.txt +11 -11
- package/dist/web/system.html +2 -2
- package/dist/web/system.txt +11 -11
- package/package.json +1 -1
- package/dist/web/_next/static/chunks/867-b64c436f5b25f39e.js +0 -1
- package/dist/web/_next/static/chunks/app/history/page-854e3dde672e38a2.js +0 -1
- package/dist/web/_next/static/chunks/app/sessions/view/page-cc99401da5173b36.js +0 -1
- /package/dist/web/_next/static/{bcBE4tY_aNh6kzLzN1luP → NosxirjkOgV-Boyq8dGPl}/_buildManifest.js +0 -0
- /package/dist/web/_next/static/{bcBE4tY_aNh6kzLzN1luP → NosxirjkOgV-Boyq8dGPl}/_ssgManifest.js +0 -0
package/dist/src/vcs/git.js
CHANGED
|
@@ -44,9 +44,9 @@ function noHooksDir() {
|
|
|
44
44
|
return process.env.SystemRoot ? join(process.env.SystemRoot, 'System32', 'copilot-operator-no-hooks') : '/nonexistent';
|
|
45
45
|
}
|
|
46
46
|
/** Runs one git command in a directory. Never throws: the caller decides what a failure means. */
|
|
47
|
-
export function git(cwd, args, timeoutMs = 60_000) {
|
|
47
|
+
export function git(cwd, args, timeoutMs = 60_000, env) {
|
|
48
48
|
return new Promise((resolve) => {
|
|
49
|
-
execFile('git', [...SAFE_GIT, ...args], { cwd, timeout: timeoutMs, windowsHide: true, maxBuffer: 8 * 1024 * 1024 }, (error, stdout, stderr) => {
|
|
49
|
+
execFile('git', [...SAFE_GIT, ...args], { cwd, timeout: timeoutMs, windowsHide: true, maxBuffer: 8 * 1024 * 1024, ...(env ? { env } : {}) }, (error, stdout, stderr) => {
|
|
50
50
|
const code = error?.code;
|
|
51
51
|
resolve({
|
|
52
52
|
ok: !error,
|
|
@@ -178,6 +178,81 @@ export async function isValidBranchName(dir, name) {
|
|
|
178
178
|
const r = await git(dir, ['check-ref-format', '--branch', name]);
|
|
179
179
|
return r.ok;
|
|
180
180
|
}
|
|
181
|
+
/**
|
|
182
|
+
* Brings a local branch up to date with its remote: `git fetch`, then a fast-forward and nothing else.
|
|
183
|
+
*
|
|
184
|
+
* Asked for on 2026-09-30, so a session's branch is cut from the code as it is on the server and not
|
|
185
|
+
* from whatever this checkout last pulled. Never a reset, a merge commit or a rewrite: a branch with
|
|
186
|
+
* commits of its own (ahead) or one that has gone its own way (diverged) is left as it is, and the
|
|
187
|
+
* outcome says so. The remote is the branch's upstream, or `origin` when it has none; a repository
|
|
188
|
+
* with neither is left alone. git is not allowed to ask for credentials — a prompt would hang the run,
|
|
189
|
+
* and a sign-in window on a machine nobody is watching is worse — so a remote that needs a password
|
|
190
|
+
* git does not already have fails the fetch, which is reported, not fatal.
|
|
191
|
+
*/
|
|
192
|
+
export async function updateFromRemote(dir, branch) {
|
|
193
|
+
const local = await git(dir, ['rev-parse', '--verify', '--quiet', `refs/heads/${branch}^{commit}`]);
|
|
194
|
+
if (!local.ok || !local.stdout)
|
|
195
|
+
return { branch, outcome: 'failed', detail: `there is no local branch ${branch}` };
|
|
196
|
+
const upstream = await git(dir, ['rev-parse', '--abbrev-ref', '--symbolic-full-name', `${branch}@{upstream}`]);
|
|
197
|
+
let remote = '';
|
|
198
|
+
let remoteBranch = branch;
|
|
199
|
+
if (upstream.ok && upstream.stdout.includes('/')) {
|
|
200
|
+
remote = upstream.stdout.slice(0, upstream.stdout.indexOf('/'));
|
|
201
|
+
remoteBranch = upstream.stdout.slice(remote.length + 1);
|
|
202
|
+
}
|
|
203
|
+
else {
|
|
204
|
+
const remotes = await git(dir, ['remote']);
|
|
205
|
+
const names = remotes.ok ? remotes.stdout.split(/\r?\n/).map((r) => r.trim()).filter(Boolean) : [];
|
|
206
|
+
if (names.includes('origin'))
|
|
207
|
+
remote = 'origin';
|
|
208
|
+
}
|
|
209
|
+
if (!remote)
|
|
210
|
+
return { branch, outcome: 'no-remote', detail: 'the repository has no remote to update from' };
|
|
211
|
+
const tracking = `${remote}/${remoteBranch}`;
|
|
212
|
+
const quiet = { ...process.env, GIT_TERMINAL_PROMPT: '0', GCM_INTERACTIVE: 'never', GIT_ASKPASS: '', SSH_ASKPASS: '' };
|
|
213
|
+
const fetched = await git(dir, ['-c', 'credential.interactive=false', 'fetch', '--quiet', '--no-tags', remote, `+refs/heads/${remoteBranch}:refs/remotes/${tracking}`], 90_000, quiet);
|
|
214
|
+
if (!fetched.ok) {
|
|
215
|
+
return { branch, remote: tracking, outcome: 'fetch-failed', detail: (fetched.stderr || fetched.stdout || 'git fetch failed').split(/\r?\n/)[0] };
|
|
216
|
+
}
|
|
217
|
+
const theirs = await git(dir, ['rev-parse', '--verify', '--quiet', `refs/remotes/${tracking}^{commit}`]);
|
|
218
|
+
if (!theirs.ok || !theirs.stdout)
|
|
219
|
+
return { branch, remote: tracking, outcome: 'no-remote', detail: `${tracking} does not exist on the remote` };
|
|
220
|
+
const from = local.stdout;
|
|
221
|
+
const to = theirs.stdout;
|
|
222
|
+
if (from === to)
|
|
223
|
+
return { branch, remote: tracking, outcome: 'up-to-date', from, to };
|
|
224
|
+
if (await isAncestor(dir, to, from))
|
|
225
|
+
return { branch, remote: tracking, outcome: 'ahead', from, to, detail: `${branch} has commits ${tracking} does not; it was left as it is` };
|
|
226
|
+
if (!(await isAncestor(dir, from, to))) {
|
|
227
|
+
return { branch, remote: tracking, outcome: 'diverged', from, to, detail: `${branch} and ${tracking} have each gone their own way; ${branch} was left as it is` };
|
|
228
|
+
}
|
|
229
|
+
// Forward only. A branch that is checked out moves with its tree (clean, or the caller would not be
|
|
230
|
+
// here); one that is not is moved by its ref, and only if it still is where it was read.
|
|
231
|
+
const current = await git(dir, ['rev-parse', '--abbrev-ref', 'HEAD']);
|
|
232
|
+
const moved = current.ok && current.stdout === branch
|
|
233
|
+
? await git(dir, ['merge', '--ff-only', '--quiet', to])
|
|
234
|
+
: await git(dir, ['update-ref', `refs/heads/${branch}`, to, from]);
|
|
235
|
+
if (!moved.ok)
|
|
236
|
+
return { branch, remote: tracking, outcome: 'failed', from, to, detail: (moved.stderr || moved.stdout).split(/\r?\n/)[0] };
|
|
237
|
+
return { branch, remote: tracking, outcome: 'updated', from, to };
|
|
238
|
+
}
|
|
239
|
+
/** One line for the log and the session page. */
|
|
240
|
+
export function describeUpdate(u) {
|
|
241
|
+
const short = (c) => (c ? c.slice(0, 8) : '?');
|
|
242
|
+
switch (u.outcome) {
|
|
243
|
+
case 'updated':
|
|
244
|
+
return `${u.branch} brought up to date with ${u.remote}: ${short(u.from)} → ${short(u.to)}`;
|
|
245
|
+
case 'up-to-date':
|
|
246
|
+
return `${u.branch} was already up to date with ${u.remote}`;
|
|
247
|
+
default:
|
|
248
|
+
return `${u.branch} not updated from the remote: ${u.detail ?? u.outcome}`;
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
/** The local branches of a repository, by name; empty when it cannot be read. */
|
|
252
|
+
export async function localBranches(dir) {
|
|
253
|
+
const r = await git(dir, ['for-each-ref', '--format=%(refname:short)', 'refs/heads']);
|
|
254
|
+
return r.ok ? r.stdout.split(/\r?\n/).map((l) => l.trim()).filter(Boolean) : [];
|
|
255
|
+
}
|
|
181
256
|
export async function branchExists(dir, name) {
|
|
182
257
|
const r = await git(dir, ['rev-parse', '--verify', '--quiet', `refs/heads/${name}`]);
|
|
183
258
|
return r.ok && r.stdout.length > 0;
|
package/dist/src/vcs/taskVcs.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { findSuspicious } from './commitHygiene.js';
|
|
2
|
-
import { branchNameFrom, commitAll, commitFiles, commitsBetween, commitSubject, createBranch, foreignCommits, isAncestor, checkoutExisting, freeBranchName, git, isValidBranchName, plannedBranchName, repoState } from './git.js';
|
|
2
|
+
import { branchExists, branchNameFrom, describeUpdate, updateFromRemote, localBranches, commitAll, commitFiles, commitsBetween, commitSubject, createBranch, foreignCommits, isAncestor, checkoutExisting, freeBranchName, git, isValidBranchName, plannedBranchName, repoState } from './git.js';
|
|
3
3
|
/** Which repository a session works in: its own setting, else the project it mirrors. */
|
|
4
4
|
export function repoDirOf(session) {
|
|
5
5
|
return (session.vcs?.repoDir?.trim() || session.mirror.rootDir?.trim() || '').trim();
|
|
@@ -25,6 +25,8 @@ allSessions = async () => []) {
|
|
|
25
25
|
message: `version control is on but inactive: ${problem}` });
|
|
26
26
|
return { vcs: { problem }, note: '' };
|
|
27
27
|
}
|
|
28
|
+
if (settings.startFrom === 'existing-branch')
|
|
29
|
+
return await onExistingBranch(session, task, dir, state, bus, saveSession);
|
|
28
30
|
// A dirty tree is the operator's own work in progress. Committing it under the bot's name
|
|
29
31
|
// or moving it to another branch would both be decisions that are not ours to make.
|
|
30
32
|
if (state.dirty) {
|
|
@@ -55,7 +57,7 @@ allSessions = async () => []) {
|
|
|
55
57
|
s.vcsBaseCommit = chosen.commit;
|
|
56
58
|
s.vcsStart = chosen;
|
|
57
59
|
});
|
|
58
|
-
bus.publish({ sessionId: session.id, taskId: task.id, type: 'vcs-start', level: chosen.note ? 'warn' : 'info',
|
|
60
|
+
bus.publish({ sessionId: session.id, taskId: task.id, type: 'vcs-start', level: chosen.note || updateWarns(chosen) ? 'warn' : 'info',
|
|
59
61
|
message: describeStart(chosen), data: { ...chosen } });
|
|
60
62
|
}
|
|
61
63
|
}
|
|
@@ -85,6 +87,48 @@ allSessions = async () => []) {
|
|
|
85
87
|
const from = firstAttemptBase(task) ?? base;
|
|
86
88
|
return await switchTo(session, task, dir, wanted, from, bus, { reuseExisting: false, start });
|
|
87
89
|
}
|
|
90
|
+
/**
|
|
91
|
+
* A session that carries on an existing branch: every task on that branch, exactly as named.
|
|
92
|
+
*
|
|
93
|
+
* Nothing is created. The branch must exist and the tree must be clean — the uncommitted changes
|
|
94
|
+
* would otherwise be carried onto the branch, or stop the switch half-way — and anything else
|
|
95
|
+
* refuses the task before a message is sent. The first run records the branch's tip as where the
|
|
96
|
+
* session started, so the record and a restore know what was there before the work.
|
|
97
|
+
*/
|
|
98
|
+
async function onExistingBranch(session, task, dir, state, bus, saveSession) {
|
|
99
|
+
const wanted = (session.vcs?.existingBranch ?? '').trim();
|
|
100
|
+
const refuse = (why) => {
|
|
101
|
+
bus.publish({ sessionId: session.id, taskId: task.id, type: 'vcs-refused', level: 'error', message: why });
|
|
102
|
+
return { vcs: { problem: why }, note: '', refuse: why };
|
|
103
|
+
};
|
|
104
|
+
if (!wanted)
|
|
105
|
+
return refuse('this session is set to carry on an existing branch, and no branch is named. Name it (Version control → "Start from").');
|
|
106
|
+
if (!(await branchExists(dir, wanted))) {
|
|
107
|
+
const have = await localBranches(dir);
|
|
108
|
+
return refuse(`this session is set to carry on the branch "${wanted}", and ${dir} has no such local branch` +
|
|
109
|
+
`${have.length > 0 ? ` (it has: ${have.slice(0, 12).join(', ')})` : ''}. Nothing was run.`);
|
|
110
|
+
}
|
|
111
|
+
if (state.dirty) {
|
|
112
|
+
return refuse(`the repository has uncommitted changes (${state.changed.slice(0, 5).join(', ')}${state.changed.length > 5 ? `, and ${state.changed.length - 5} more` : ''}), ` +
|
|
113
|
+
`so the work cannot be put on "${wanted}" without taking them along. Commit or stash them first. Nothing was run.`);
|
|
114
|
+
}
|
|
115
|
+
let start = session.vcsStart;
|
|
116
|
+
if (!session.vcsBaseCommit || start?.kind !== 'existing-branch' || start.branch !== wanted) {
|
|
117
|
+
const update = session.vcs?.updateFromRemote !== false ? await updateFromRemote(dir, wanted) : undefined;
|
|
118
|
+
const tip = await branchTip(dir, wanted);
|
|
119
|
+
if (tip) {
|
|
120
|
+
const chosen = { kind: 'existing-branch', commit: tip, branch: wanted, ...(update ? { update } : {}) };
|
|
121
|
+
start = chosen;
|
|
122
|
+
await saveSession((s) => {
|
|
123
|
+
s.vcsBaseCommit = chosen.commit;
|
|
124
|
+
s.vcsStart = chosen;
|
|
125
|
+
});
|
|
126
|
+
bus.publish({ sessionId: session.id, taskId: task.id, type: 'vcs-start', level: updateWarns(chosen) ? 'warn' : 'info', message: describeStart(chosen), data: { ...chosen } });
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
const prepared = await switchTo(session, task, dir, wanted, undefined, bus, { reuseExisting: true, mustExist: true, start });
|
|
130
|
+
return prepared.vcs.branch === wanted ? prepared : refuse(`the repository could not be put on "${wanted}": ${prepared.vcs.problem ?? 'unknown reason'}. Nothing was run.`);
|
|
131
|
+
}
|
|
88
132
|
/**
|
|
89
133
|
* The commit a session's first branch is cut from, by its `startFrom`, or why there is none.
|
|
90
134
|
*
|
|
@@ -101,6 +145,8 @@ export async function sessionStart(session, dir, head, allSessions) {
|
|
|
101
145
|
if (how === 'head')
|
|
102
146
|
return head ? { start: { kind: 'head', commit: head } } : {};
|
|
103
147
|
const fromBranch = async (note) => {
|
|
148
|
+
// The code as it is on the server, not as this checkout last pulled it: see `updateFromRemote`.
|
|
149
|
+
const update = session.vcs?.updateFromRemote !== false && (await branchTip(dir, baseBranch)) ? await updateFromRemote(dir, baseBranch) : undefined;
|
|
104
150
|
const tip = await branchTip(dir, baseBranch);
|
|
105
151
|
if (!tip) {
|
|
106
152
|
return {
|
|
@@ -108,7 +154,7 @@ export async function sessionStart(session, dir, head, allSessions) {
|
|
|
108
154
|
'Name the branch the work should start from (Version control → "Start from"), or create it.',
|
|
109
155
|
};
|
|
110
156
|
}
|
|
111
|
-
return { start: { kind: 'branch', commit: tip, branch: baseBranch, ...(note ? { note } : {}) } };
|
|
157
|
+
return { start: { kind: 'branch', commit: tip, branch: baseBranch, ...(note ? { note } : {}), ...(update ? { update } : {}) } };
|
|
112
158
|
};
|
|
113
159
|
if (how === 'branch')
|
|
114
160
|
return await fromBranch();
|
|
@@ -160,10 +206,17 @@ export function describeStart(start) {
|
|
|
160
206
|
const at = start.commit.slice(0, 8);
|
|
161
207
|
const said = start.kind === 'previous-session'
|
|
162
208
|
? `this session continues "${start.fromSession?.name ?? '?'}": it starts from the end of its branch ${start.branch} (${at})`
|
|
163
|
-
: start.kind === 'branch'
|
|
164
|
-
? `this session
|
|
165
|
-
:
|
|
166
|
-
|
|
209
|
+
: start.kind === 'existing-branch'
|
|
210
|
+
? `this session carries on the existing branch ${start.branch}, from its tip ${at}`
|
|
211
|
+
: start.kind === 'branch'
|
|
212
|
+
? `this session starts from the local branch ${start.branch} (${at})`
|
|
213
|
+
: `this session starts from where the repository was (${at})`;
|
|
214
|
+
const updated = start.update ? ` (${describeUpdate(start.update)})` : '';
|
|
215
|
+
return start.note ? `${said}${updated} — ${start.note}` : `${said}${updated}`;
|
|
216
|
+
}
|
|
217
|
+
/** Whether the update before a session's start is worth a warning: it did not bring the branch up to date. */
|
|
218
|
+
export function updateWarns(start) {
|
|
219
|
+
return !!start.update && !['updated', 'up-to-date', 'no-remote'].includes(start.update.outcome);
|
|
167
220
|
}
|
|
168
221
|
/**
|
|
169
222
|
* Which branch has the complete work of a session, when one does.
|
|
@@ -189,7 +242,9 @@ export function sessionBranches(session) {
|
|
|
189
242
|
function firstAttemptBase(task) {
|
|
190
243
|
return earliestBase(task);
|
|
191
244
|
}
|
|
192
|
-
async function switchTo(session, task, dir, wantedName, from, bus,
|
|
245
|
+
async function switchTo(session, task, dir, wantedName, from, bus,
|
|
246
|
+
/** `mustExist`: carry on this branch or nothing; never create it. */
|
|
247
|
+
opts) {
|
|
193
248
|
if (!(await isValidBranchName(dir, wantedName))) {
|
|
194
249
|
const problem = `"${wantedName}" is not a name git accepts.`;
|
|
195
250
|
bus.publish({ sessionId: session.id, taskId: task.id, type: 'vcs-problem', level: 'warn', message: problem });
|
|
@@ -203,7 +258,7 @@ async function switchTo(session, task, dir, wantedName, from, bus, opts) {
|
|
|
203
258
|
}
|
|
204
259
|
else if (opts.reuseExisting) {
|
|
205
260
|
const existing = await checkoutExisting(dir, wantedName);
|
|
206
|
-
result = existing.ok ? existing : await createBranch(dir, wantedName, from);
|
|
261
|
+
result = existing.ok || opts.mustExist ? existing : await createBranch(dir, wantedName, from);
|
|
207
262
|
}
|
|
208
263
|
else {
|
|
209
264
|
name = await freeBranchName(dir, wantedName);
|
|
@@ -222,7 +277,8 @@ async function switchTo(session, task, dir, wantedName, from, bus, opts) {
|
|
|
222
277
|
// What the task stands on, and what it does not: the base commit by name, and the other
|
|
223
278
|
// tasks of this session that already ran, with the branch each of them worked on.
|
|
224
279
|
const subject = vcs.baseCommit ? await commitSubject(dir, vcs.baseCommit) : '';
|
|
225
|
-
|
|
280
|
+
// A session carrying on an existing branch has all its tasks on it, one after another.
|
|
281
|
+
const mode = session.vcs?.startFrom === 'existing-branch' ? 'per-session' : (session.vcs?.branchMode ?? 'per-task');
|
|
226
282
|
// On this branch (per-session: their work is here) or on others (per-task: it is not). A
|
|
227
283
|
// session whose mode was switched mid-way has both, and each kind is reported by where it is.
|
|
228
284
|
const earlier = session.tasks
|
|
@@ -273,9 +329,11 @@ export function noteFor(repoDir, vcs, ctx = { mode: 'per-task', earlier: [] }) {
|
|
|
273
329
|
*/
|
|
274
330
|
const began = ctx.start?.kind === 'previous-session'
|
|
275
331
|
? `This session continues the work of the earlier session "${ctx.start.fromSession?.name ?? ''}": it was started from the end of its branch \`${ctx.start.branch}\`, so that session's work is already in your working tree. Build on it; do not redo it.`
|
|
276
|
-
: ctx.start?.kind === 'branch'
|
|
277
|
-
? `This session
|
|
278
|
-
: ''
|
|
332
|
+
: ctx.start?.kind === 'existing-branch'
|
|
333
|
+
? `This session carries on the existing branch \`${ctx.start.branch}\`: the work already on it is in your working tree. Build on it; do not redo it.`
|
|
334
|
+
: ctx.start?.kind === 'branch'
|
|
335
|
+
? `This session started from the local branch \`${ctx.start.branch}\`, not from any earlier session's work${ctx.start.note ? ` (${ctx.start.note})` : ''}.`
|
|
336
|
+
: '';
|
|
279
337
|
return [
|
|
280
338
|
'## Version control',
|
|
281
339
|
'',
|
package/dist/web/404.html
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<!DOCTYPE html><!--
|
|
1
|
+
<!DOCTYPE html><!--NosxirjkOgV_Boyq8dGPl--><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/a0642fdb8adf9edb.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-84c19f047972ffc3.js" async=""></script><script src="/_next/static/chunks/549-a5a59a94f92bb3eb.js" async=""></script><script src="/_next/static/chunks/app/layout-560bd6d173302e5a.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,"Segoe UI",Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";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[1205,[\"197\",\"static/chunks/197-f7c33a0114fc3db3.js\",\"867\",\"static/chunks/867-b64c436f5b25f39e.js\",\"549\",\"static/chunks/549-a5a59a94f92bb3eb.js\",\"177\",\"static/chunks/app/layout-560bd6d173302e5a.js\"],\"themeScript\"]\n3:I[1205,[\"197\",\"static/chunks/197-f7c33a0114fc3db3.js\",\"867\",\"static/chunks/867-b64c436f5b25f39e.js\",\"549\",\"static/chunks/549-a5a59a94f92bb3eb.js\",\"177\",\"static/chunks/app/layout-560bd6d173302e5a.js\"],\"AppearanceProvider\"]\n4:I[867,[\"197\",\"static/chunks/197-f7c33a0114fc3db3.js\",\"867\",\"static/chunks/867-b64c436f5b25f39e.js\",\"549\",\"static/chunks/549-a5a59a94f92bb3eb.js\",\"177\",\"static/chunks/app/layout-560bd6d173302e5a.js\"],\"LanguageProvider\"]\n5:I[1035,[\"197\",\"static/chunks/197-f7c33a0114fc3db3.js\",\"867\",\"static/chunks/867-b64c436f5b25f39e.js\",\"549\",\"static/chunks/549-a5a59a94f92bb3eb.js\",\"177\",\"static/chunks/app/layout-560bd6d173302e5a.js\"],\"DialogHost\"]\n6:I[8214,[\"197\",\"static/chunks/197-f7c33a0114fc3db3.js\",\"867\",\"static/chunks/867-b64c436f5b25f39e.js\",\"549\",\"static/chunks/549-a5a59a94f92bb3eb.js\",\"177\",\"static/chunks/app/layout-560bd6d173302e5a.js\"],\"SkipLink\"]\n7:I[8197,[\"197\",\"static/chunks/197-f7c33a0114fc3db3.js\",\"867\",\"static/chunks/867-b64c436f5b25f39e.js\",\"549\",\"static/chunks/549-a5a59a94f92bb3eb.js\",\"177\",\"static/chunks/app/layout-560bd6d173302e5a.js\"],\"\"]\n8:I[8214,[\"197\",\"static/chunks/197-f7c33a0114fc3db3.js\",\"867\",\"static/chunks/867-b64c436f5b25f39e.js\",\"549\",\"static/chunks/549-a5a59a94f92bb3eb.js\",\"177\",\"static/chunks/app/layout-560bd6d173302e5a.js\"],\"Nav\"]\n9:I[6657,[\"197\",\"static/chunks/197-f7c33a0114fc3db3.js\",\"867\",\"static/chunks/867-b64c436f5b25f39e.js\",\"549\",\"static/chunks/549-a5a59a94f92bb3eb.js\",\"177\",\"static/chunks/app/layout-560bd6d173302e5a.js\"],\"GlobalApprovals\"]\na:I[5204,[],\"\"]\nb:I[2642,[],\"\"]\nc:I[7712,[\"197\",\"static/chunks/197-f7c33a0114fc3db3.js\",\"867\",\"static/chunks/867-b64c436f5b25f39e.js\",\"549\",\"static/chunks/549-a5a59a94f92bb3eb.js\",\"177\",\"static/chunks/app/layout-560bd6d173302e5a.js\"],\"ScrollJump\"]\nd:I[433,[],\"OutletBoundary\"]\nf:I[9884,[],\"AsyncMeta"])</script><script>self.__next_f.push([1,"dataOutlet\"]\n11:I[433,[],\"ViewportBoundary\"]\n13:I[433,[],\"MetadataBoundary\"]\n14:\"$Sreact.suspense\"\n16:I[3536,[],\"\"]\n:HL[\"/_next/static/css/a0642fdb8adf9edb.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"b\":\"bcBE4tY_aNh6kzLzN1luP\",\"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/a0642fdb8adf9edb.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\":\"$2\"}}]}],[\"$\",\"body\",null,{\"children\":[\"$\",\"$L3\",null,{\"children\":[\"$\",\"$L4\",null,{\"children\":[\"$\",\"$L5\",null,{\"children\":[[\"$\",\"$L6\",null,{}],[\"$\",\"div\",null,{\"className\":\"wrap\",\"children\":[[\"$\",\"header\",null,{\"className\":\"top\",\"children\":[[\"$\",\"h1\",null,{\"children\":[\"$\",\"$L7\",null,{\"href\":\"/\",\"children\":\"copilot-operator\"}]}],[\"$\",\"$L8\",null,{}]]}],[\"$\",\"$L9\",null,{}],[\"$\",\"main\",null,{\"id\":\"main\",\"children\":[\"$\",\"$La\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$Lb\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}]]}],[\"$\",\"$Lc\",null,{}]]}]}]}]}]]}]]}],{\"children\":[\"/_not-found\",[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$La\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$Lb\",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,[\"$\",\"$Ld\",null,{\"children\":[\"$Le\",[\"$\",\"$Lf\",null,{\"promise\":\"$@10\"}]]}]]}],{},null,false]},null,false]},null,false],[\"$\",\"$1\",\"h\",{\"children\":[[\"$\",\"meta\",null,{\"name\":\"robots\",\"content\":\"noindex\"}],[[\"$\",\"$L11\",null,{\"children\":\"$L12\"}],null],[\"$\",\"$L13\",null,{\"children\":[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$14\",null,{\"fallback\":null,\"children\":\"$L15\"}]}]}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$16\",[]],\"s\":false,\"S\":true}\n"])</script><script>self.__next_f.push([1,"12:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\ne:null\n"])</script><script>self.__next_f.push([1,"10:{\"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,"15:\"$10: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,"Segoe UI",Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";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[1205,[\"197\",\"static/chunks/197-f7c33a0114fc3db3.js\",\"867\",\"static/chunks/867-84c19f047972ffc3.js\",\"549\",\"static/chunks/549-a5a59a94f92bb3eb.js\",\"177\",\"static/chunks/app/layout-560bd6d173302e5a.js\"],\"themeScript\"]\n3:I[1205,[\"197\",\"static/chunks/197-f7c33a0114fc3db3.js\",\"867\",\"static/chunks/867-84c19f047972ffc3.js\",\"549\",\"static/chunks/549-a5a59a94f92bb3eb.js\",\"177\",\"static/chunks/app/layout-560bd6d173302e5a.js\"],\"AppearanceProvider\"]\n4:I[867,[\"197\",\"static/chunks/197-f7c33a0114fc3db3.js\",\"867\",\"static/chunks/867-84c19f047972ffc3.js\",\"549\",\"static/chunks/549-a5a59a94f92bb3eb.js\",\"177\",\"static/chunks/app/layout-560bd6d173302e5a.js\"],\"LanguageProvider\"]\n5:I[1035,[\"197\",\"static/chunks/197-f7c33a0114fc3db3.js\",\"867\",\"static/chunks/867-84c19f047972ffc3.js\",\"549\",\"static/chunks/549-a5a59a94f92bb3eb.js\",\"177\",\"static/chunks/app/layout-560bd6d173302e5a.js\"],\"DialogHost\"]\n6:I[8214,[\"197\",\"static/chunks/197-f7c33a0114fc3db3.js\",\"867\",\"static/chunks/867-84c19f047972ffc3.js\",\"549\",\"static/chunks/549-a5a59a94f92bb3eb.js\",\"177\",\"static/chunks/app/layout-560bd6d173302e5a.js\"],\"SkipLink\"]\n7:I[8197,[\"197\",\"static/chunks/197-f7c33a0114fc3db3.js\",\"867\",\"static/chunks/867-84c19f047972ffc3.js\",\"549\",\"static/chunks/549-a5a59a94f92bb3eb.js\",\"177\",\"static/chunks/app/layout-560bd6d173302e5a.js\"],\"\"]\n8:I[8214,[\"197\",\"static/chunks/197-f7c33a0114fc3db3.js\",\"867\",\"static/chunks/867-84c19f047972ffc3.js\",\"549\",\"static/chunks/549-a5a59a94f92bb3eb.js\",\"177\",\"static/chunks/app/layout-560bd6d173302e5a.js\"],\"Nav\"]\n9:I[6657,[\"197\",\"static/chunks/197-f7c33a0114fc3db3.js\",\"867\",\"static/chunks/867-84c19f047972ffc3.js\",\"549\",\"static/chunks/549-a5a59a94f92bb3eb.js\",\"177\",\"static/chunks/app/layout-560bd6d173302e5a.js\"],\"GlobalApprovals\"]\na:I[5204,[],\"\"]\nb:I[2642,[],\"\"]\nc:I[7712,[\"197\",\"static/chunks/197-f7c33a0114fc3db3.js\",\"867\",\"static/chunks/867-84c19f047972ffc3.js\",\"549\",\"static/chunks/549-a5a59a94f92bb3eb.js\",\"177\",\"static/chunks/app/layout-560bd6d173302e5a.js\"],\"ScrollJump\"]\nd:I[433,[],\"OutletBoundary\"]\nf:I[9884,[],\"AsyncMeta"])</script><script>self.__next_f.push([1,"dataOutlet\"]\n11:I[433,[],\"ViewportBoundary\"]\n13:I[433,[],\"MetadataBoundary\"]\n14:\"$Sreact.suspense\"\n16:I[3536,[],\"\"]\n:HL[\"/_next/static/css/a0642fdb8adf9edb.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"b\":\"NosxirjkOgV-Boyq8dGPl\",\"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/a0642fdb8adf9edb.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\":\"$2\"}}]}],[\"$\",\"body\",null,{\"children\":[\"$\",\"$L3\",null,{\"children\":[\"$\",\"$L4\",null,{\"children\":[\"$\",\"$L5\",null,{\"children\":[[\"$\",\"$L6\",null,{}],[\"$\",\"div\",null,{\"className\":\"wrap\",\"children\":[[\"$\",\"header\",null,{\"className\":\"top\",\"children\":[[\"$\",\"h1\",null,{\"children\":[\"$\",\"$L7\",null,{\"href\":\"/\",\"children\":\"copilot-operator\"}]}],[\"$\",\"$L8\",null,{}]]}],[\"$\",\"$L9\",null,{}],[\"$\",\"main\",null,{\"id\":\"main\",\"children\":[\"$\",\"$La\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$Lb\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}]]}],[\"$\",\"$Lc\",null,{}]]}]}]}]}]]}]]}],{\"children\":[\"/_not-found\",[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$La\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$Lb\",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,[\"$\",\"$Ld\",null,{\"children\":[\"$Le\",[\"$\",\"$Lf\",null,{\"promise\":\"$@10\"}]]}]]}],{},null,false]},null,false]},null,false],[\"$\",\"$1\",\"h\",{\"children\":[[\"$\",\"meta\",null,{\"name\":\"robots\",\"content\":\"noindex\"}],[[\"$\",\"$L11\",null,{\"children\":\"$L12\"}],null],[\"$\",\"$L13\",null,{\"children\":[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$14\",null,{\"fallback\":null,\"children\":\"$L15\"}]}]}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$16\",[]],\"s\":false,\"S\":true}\n"])</script><script>self.__next_f.push([1,"12:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\ne:null\n"])</script><script>self.__next_f.push([1,"10:{\"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,"15:\"$10:metadata\"\n"])</script></body></html>
|