@ai-ecoverse/slicc-spectrum 1.86.7 → 1.88.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -6,7 +6,7 @@ import {
6
6
  import {
7
7
  DummySettings,
8
8
  clock
9
- } from "./chunk-X4C3AZJT.js";
9
+ } from "./chunk-VRFAMBWK.js";
10
10
  import {
11
11
  Emitter
12
12
  } from "./chunk-T5NHW4KC.js";
@@ -1209,6 +1209,7 @@ function events() {
1209
1209
  title: "docs-pass failed",
1210
1210
  text: "The Adobe session expired. Log in again to continue.",
1211
1211
  action: "login",
1212
+ account: "ai-adobe",
1212
1213
  createdAt: at(1476)
1213
1214
  },
1214
1215
  {
@@ -1578,6 +1579,13 @@ var accounts = [
1578
1579
  { id: "anthropic", provider: "Anthropic", identity: "API key ending 3f2a", status: "connected" },
1579
1580
  { id: "github", provider: "GitHub", identity: "@example-dev", status: "connected" },
1580
1581
  { id: "adobe", provider: "Adobe", identity: "dev@example.com", status: "expired" },
1582
+ {
1583
+ id: "ai-adobe",
1584
+ provider: "Adobe AI",
1585
+ identity: "harbor-ops@example.com",
1586
+ status: "expired",
1587
+ auth: "oauth"
1588
+ },
1581
1589
  { id: "openai", provider: "OpenAI", identity: "", status: "disconnected", auth: "api-key" },
1582
1590
  {
1583
1591
  id: "mcp:docs",
@@ -1994,6 +2002,16 @@ var conversations = {
1994
2002
  title: "Mail connector",
1995
2003
  text: "The connector returned 401. Reconnect the account in Settings.",
1996
2004
  createdAt: at2(-19)
2005
+ },
2006
+ {
2007
+ id: "m-t4",
2008
+ role: "system",
2009
+ kind: "error",
2010
+ action: "login",
2011
+ account: "mcp:tickets",
2012
+ title: "Tickets connector",
2013
+ text: "The tickets server rejected its token.",
2014
+ createdAt: at2(-18)
1997
2015
  }
1998
2016
  ]
1999
2017
  };
@@ -2533,6 +2551,156 @@ var DummyGuests = class extends Emitter {
2533
2551
  }
2534
2552
  };
2535
2553
 
2554
+ // src/dummy/import.ts
2555
+ var day3 = 864e5;
2556
+ var importNotV6 = "That zip isn\u2019t a SLICC 6 profile export.";
2557
+ var importCancelled = "The import was cancelled.";
2558
+ var importReport = "/root/v6-import-2026-10-18.md";
2559
+ var importTotal = 14;
2560
+ var importBefore = Date.UTC(2026, 9, 15, 14, 30);
2561
+ function importPreview(already) {
2562
+ return {
2563
+ origin: "www.sliccy.ai",
2564
+ createdAt: Date.UTC(2026, 9, 12, 16, 20),
2565
+ cones: 3,
2566
+ scoops: 14,
2567
+ frozen: 2,
2568
+ bytes: 4823449,
2569
+ skills: ["ferry-times", "pantry-labels"],
2570
+ crons: 2,
2571
+ webhooks: 1,
2572
+ flagged: ["files/cones/cone/.env"],
2573
+ providers: ["anthropic", "openai"],
2574
+ mounts: ["/mnt/photos", "/mnt/recipes"],
2575
+ already,
2576
+ text: "This export from www.sliccy.ai has 3 cones with 14 scoops and 2 frozen conversations. They arrive frozen, so nothing runs until you thaw them."
2577
+ };
2578
+ }
2579
+ var importCones = [
2580
+ {
2581
+ id: "cone-v6-lighthouse",
2582
+ kind: "cone",
2583
+ name: "lighthouse",
2584
+ title: "Plan the lighthouse open day",
2585
+ model: "claude-sonnet-5-5",
2586
+ messages: 31,
2587
+ age: 36,
2588
+ v6: true
2589
+ },
2590
+ {
2591
+ id: "cone-v6-pantry",
2592
+ kind: "cone",
2593
+ name: "pantry",
2594
+ title: "Sort the pantry inventory and print the labels",
2595
+ model: "claude-haiku-4-5",
2596
+ messages: 12,
2597
+ age: 44,
2598
+ v6: true
2599
+ },
2600
+ {
2601
+ id: "cone-v6-ferry",
2602
+ kind: "cone",
2603
+ name: "ferry-times",
2604
+ title: "Check the ferry timetable changes every morning",
2605
+ model: "gpt-6-mini",
2606
+ messages: 58,
2607
+ age: 71,
2608
+ v6: true
2609
+ }
2610
+ ];
2611
+ var idle = { phase: "idle", done: 0, total: 0, text: "" };
2612
+ function conversation(id, title, at3) {
2613
+ return [
2614
+ { id: `${id}-1`, role: "user", text: title, createdAt: at3 },
2615
+ {
2616
+ id: `${id}-2`,
2617
+ role: "assistant",
2618
+ status: "done",
2619
+ createdAt: at3 + 6e4,
2620
+ parts: [
2621
+ { type: "text", text: "Imported from SLICC 6. The earlier turns are in the report." }
2622
+ ]
2623
+ }
2624
+ ];
2625
+ }
2626
+ var DummyImport = class {
2627
+ scenario;
2628
+ #agent;
2629
+ #clock;
2630
+ #run = 0;
2631
+ #imports = 0;
2632
+ #already;
2633
+ #progress = idle;
2634
+ constructor(scenario, agent, clock2) {
2635
+ this.scenario = scenario;
2636
+ this.#agent = agent;
2637
+ this.#clock = clock2;
2638
+ this.#already = scenario === "again" ? importBefore : null;
2639
+ }
2640
+ importing() {
2641
+ return { ...this.#progress };
2642
+ }
2643
+ importCancel() {
2644
+ this.#run++;
2645
+ this.#set(idle);
2646
+ }
2647
+ async importProfile(_file, options) {
2648
+ const run = ++this.#run;
2649
+ this.#set({ phase: "checking", done: 0, total: 0, text: "Checking the profile\u2026" });
2650
+ await this.#step(run, this.scenario === "cancel-check" ? 200 : 4);
2651
+ if (this.scenario === "fail") {
2652
+ this.#set({ phase: "failed", done: 0, total: 0, text: importNotV6 });
2653
+ throw new Error(importNotV6);
2654
+ }
2655
+ const preview = importPreview(this.#already);
2656
+ if (options.preview) {
2657
+ this.#set(idle);
2658
+ return { preview, cones: [], report: null, text: preview.text };
2659
+ }
2660
+ for (const done of [0, 5, 10, importTotal]) {
2661
+ this.#set({
2662
+ phase: "writing",
2663
+ done,
2664
+ total: importTotal,
2665
+ text: `Importing ${done}/${importTotal}`
2666
+ });
2667
+ await this.#step(run, 6);
2668
+ }
2669
+ const cones = this.#write();
2670
+ this.#already = Date.now();
2671
+ this.#set({ phase: "done", done: importTotal, total: importTotal, text: "Imported" });
2672
+ return {
2673
+ preview,
2674
+ cones,
2675
+ report: importReport,
2676
+ text: "Their scoops, skills and crons came along. Sign in to Anthropic and OpenAI again before you thaw them."
2677
+ };
2678
+ }
2679
+ #write() {
2680
+ const suffix = this.#imports ? `-${this.#imports + 1}` : "";
2681
+ this.#imports++;
2682
+ const now2 = Date.now();
2683
+ const rows = importCones.map(({ age, ...cone }) => {
2684
+ const id = `${cone.id}${suffix}`;
2685
+ const frozenAt = now2 - age * day3;
2686
+ return {
2687
+ cone: { ...cone, id, frozenAt },
2688
+ messages: conversation(id, cone.title, frozenAt)
2689
+ };
2690
+ });
2691
+ this.#agent.addFrozen(rows);
2692
+ return rows.map((row) => row.cone.id);
2693
+ }
2694
+ async #step(run, ticks2) {
2695
+ await this.#clock.sleep(ticks2);
2696
+ if (run !== this.#run) throw new Error(importCancelled);
2697
+ }
2698
+ #set(progress) {
2699
+ this.#progress = progress;
2700
+ this.#agent.emit("importing", this.importing());
2701
+ }
2702
+ };
2703
+
2536
2704
  // src/dummy/script.ts
2537
2705
  var units2 = "/workspace/harbor/src/lib/units.ts";
2538
2706
  var kelvin = `
@@ -2851,24 +3019,29 @@ var DummyAgent = class extends Emitter {
2851
3019
  this.#queues.set(agent.id, structuredClone([...queues2[agent.id] ?? []]));
2852
3020
  }
2853
3021
  this.#active = this.#agents[0]?.id ?? "";
2854
- for (const { cone, messages } of frozen2) {
2855
- this.#frozen.push({ ...cone });
2856
- this.#ice.set(cone.id, [
2857
- {
2858
- agent: {
2859
- id: cone.id,
2860
- name: cone.name,
2861
- kind: "cone",
2862
- parentId: null,
2863
- status: "idle",
2864
- model: cone.model,
2865
- contextFill: 0.2,
2866
- unread: 0
2867
- },
2868
- messages: structuredClone([...messages])
2869
- }
2870
- ]);
2871
- }
3022
+ for (const { cone, messages } of frozen2) this.#store(cone, messages);
3023
+ }
3024
+ #store(cone, messages) {
3025
+ this.#frozen.push({ ...cone });
3026
+ this.#ice.set(cone.id, [
3027
+ {
3028
+ agent: {
3029
+ id: cone.id,
3030
+ name: cone.name,
3031
+ kind: "cone",
3032
+ parentId: null,
3033
+ status: "idle",
3034
+ model: cone.model,
3035
+ contextFill: 0.2,
3036
+ unread: 0
3037
+ },
3038
+ messages: structuredClone([...messages])
3039
+ }
3040
+ ]);
3041
+ }
3042
+ addFrozen(rows) {
3043
+ for (const { cone, messages } of rows) this.#store(cone, messages);
3044
+ this.emit("frozen", this.frozen());
2872
3045
  }
2873
3046
  list() {
2874
3047
  return this.#agents.map((agent) => ({ ...agent }));
@@ -4430,16 +4603,16 @@ var status = `<!DOCTYPE html>
4430
4603
  `;
4431
4604
 
4432
4605
  // src/dummy/extras.ts
4433
- var day3 = 864e5;
4606
+ var day4 = 864e5;
4434
4607
  var now = Date.UTC(2026, 9, 5, 9, 0);
4435
4608
  function frozenConversation(topic, reply) {
4436
4609
  return [
4437
- { id: `f-${topic}-1`, role: "user", text: topic, createdAt: now - 3 * day3 },
4610
+ { id: `f-${topic}-1`, role: "user", text: topic, createdAt: now - 3 * day4 },
4438
4611
  {
4439
4612
  id: `f-${topic}-2`,
4440
4613
  role: "assistant",
4441
4614
  status: "done",
4442
- createdAt: now - 3 * day3 + 6e4,
4615
+ createdAt: now - 3 * day4 + 6e4,
4443
4616
  parts: [{ type: "text", text: reply }]
4444
4617
  }
4445
4618
  ];
@@ -4453,7 +4626,7 @@ var frozen = [
4453
4626
  title: "Write the onboarding guide for new contributors",
4454
4627
  model: "claude-sonnet-5-5",
4455
4628
  messages: 42,
4456
- frozenAt: now - 2 * day3
4629
+ frozenAt: now - 2 * day4
4457
4630
  },
4458
4631
  messages: frozenConversation(
4459
4632
  "Write the onboarding guide for new contributors",
@@ -4468,7 +4641,7 @@ var frozen = [
4468
4641
  title: "Spike: can the cache move to KV without a cold start?",
4469
4642
  model: "claude-opus-5-5",
4470
4643
  messages: 118,
4471
- frozenAt: now - 6 * day3
4644
+ frozenAt: now - 6 * day4
4472
4645
  },
4473
4646
  messages: frozenConversation(
4474
4647
  "Spike: can the cache move to KV without a cold start?",
@@ -4483,7 +4656,7 @@ var frozen = [
4483
4656
  title: "Summarize Q3 uptime and incidents",
4484
4657
  model: "claude-haiku-4-5",
4485
4658
  messages: 17,
4486
- frozenAt: now - 21 * day3
4659
+ frozenAt: now - 21 * day4
4487
4660
  },
4488
4661
  messages: frozenConversation(
4489
4662
  "Summarize Q3 uptime and incidents",
@@ -4498,7 +4671,7 @@ var frozen = [
4498
4671
  title: "Check the tide tables against the harbor feed",
4499
4672
  model: "claude-haiku-4-5",
4500
4673
  messages: 9,
4501
- frozenAt: now - 1 * day3
4674
+ frozenAt: now - 1 * day4
4502
4675
  },
4503
4676
  messages: frozenConversation(
4504
4677
  "Check the tide tables against the harbor feed",
@@ -4513,7 +4686,7 @@ var frozen = [
4513
4686
  title: "Write the nightly digest of merged pull requests",
4514
4687
  model: "claude-sonnet-5-5",
4515
4688
  messages: 6,
4516
- frozenAt: now - 3 * day3
4689
+ frozenAt: now - 3 * day4
4517
4690
  },
4518
4691
  messages: frozenConversation(
4519
4692
  "Write the nightly digest of merged pull requests",
@@ -4529,7 +4702,7 @@ var memories = [
4529
4702
  title: "Lead with the result",
4530
4703
  body: "Keep replies short. Lead with the result, then the evidence.",
4531
4704
  tag: "feedback",
4532
- updatedAt: now - 5 * day3
4705
+ updatedAt: now - 5 * day4
4533
4706
  },
4534
4707
  {
4535
4708
  id: "mem-2",
@@ -4538,7 +4711,7 @@ var memories = [
4538
4711
  title: "Tests before \u201Cfixed\u201D",
4539
4712
  body: "Run the tests before saying something is fixed, and quote the summary line.",
4540
4713
  tag: "feedback",
4541
- updatedAt: now - 9 * day3
4714
+ updatedAt: now - 9 * day4
4542
4715
  },
4543
4716
  {
4544
4717
  id: "mem-3",
@@ -4547,7 +4720,7 @@ var memories = [
4547
4720
  title: "Works in UTC",
4548
4721
  body: "Schedules, timestamps and cron expressions are in UTC unless stated otherwise.",
4549
4722
  tag: "user",
4550
- updatedAt: now - 30 * day3
4723
+ updatedAt: now - 30 * day4
4551
4724
  },
4552
4725
  {
4553
4726
  id: "mem-4",
@@ -4556,7 +4729,7 @@ var memories = [
4556
4729
  title: "harbor",
4557
4730
  body: "Forecast API, deployed as a worker. Cache bugs show up around midnight UTC. Staging deploys are frozen on Fridays.",
4558
4731
  tag: "project",
4559
- updatedAt: now - day3
4732
+ updatedAt: now - day4
4560
4733
  },
4561
4734
  {
4562
4735
  id: "mem-5",
@@ -4565,7 +4738,7 @@ var memories = [
4565
4738
  title: "release-notes",
4566
4739
  body: "Drafted every Friday from merged pull requests, grouped as features, fixes and chores.",
4567
4740
  tag: "project",
4568
- updatedAt: now - 4 * day3
4741
+ updatedAt: now - 4 * day4
4569
4742
  },
4570
4743
  {
4571
4744
  id: "mem-6",
@@ -4574,7 +4747,7 @@ var memories = [
4574
4747
  title: "Cache keys",
4575
4748
  body: "Cache keys are `city:UTC-date`. Never key on local time.",
4576
4749
  tag: "project",
4577
- updatedAt: now - 2 * day3
4750
+ updatedAt: now - 2 * day4
4578
4751
  },
4579
4752
  {
4580
4753
  id: "mem-7",
@@ -4583,7 +4756,7 @@ var memories = [
4583
4756
  title: "Retries",
4584
4757
  body: "Retry upstream calls three times with exponential backoff starting at 250 ms.",
4585
4758
  tag: null,
4586
- updatedAt: now - 2 * day3
4759
+ updatedAt: now - 2 * day4
4587
4760
  },
4588
4761
  {
4589
4762
  id: "mem-8",
@@ -4592,7 +4765,7 @@ var memories = [
4592
4765
  title: "Past tense, no ticket numbers",
4593
4766
  body: "One sentence per change, in the past tense, without ticket numbers.",
4594
4767
  tag: "feedback",
4595
- updatedAt: now - 7 * day3
4768
+ updatedAt: now - 7 * day4
4596
4769
  },
4597
4770
  {
4598
4771
  id: "mem-9",
@@ -4601,7 +4774,7 @@ var memories = [
4601
4774
  title: "Read the tests first",
4602
4775
  body: "Start a review from the tests, then read the change they cover.",
4603
4776
  tag: "feedback",
4604
- updatedAt: now - 3 * day3,
4777
+ updatedAt: now - 3 * day4,
4605
4778
  source: "entry"
4606
4779
  },
4607
4780
  {
@@ -4611,7 +4784,7 @@ var memories = [
4611
4784
  title: "Checks",
4612
4785
  body: "Flag any change to cache keys. Ask for a test when a retry count changes.",
4613
4786
  tag: null,
4614
- updatedAt: now - 3 * day3,
4787
+ updatedAt: now - 3 * day4,
4615
4788
  source: "notes"
4616
4789
  }
4617
4790
  ];
@@ -5372,6 +5545,27 @@ var followers = [
5372
5545
  access: { view: false, control: false, terminal: false }
5373
5546
  }
5374
5547
  ];
5548
+ var pairingCode = "ab12\u2026ef";
5549
+ var pairingRefused = "That isn\u2019t a pairing link from slicc pair.";
5550
+ var pairingStopped = "slicc on this computer stopped answering. Run slicc pair again.";
5551
+ var pairedDevice = {
5552
+ id: "link-quay",
5553
+ name: "slicc on quay-studio",
5554
+ host: "quay-studio.slicc.internal",
5555
+ address: "198.18.57.11",
5556
+ mode: "local",
5557
+ kind: "cli",
5558
+ offers: ["net", "http", "ssh"],
5559
+ exit: true,
5560
+ state: "connected",
5561
+ folders: [{ name: "sketches", source: "quay-studio/sketches", readonly: false }]
5562
+ };
5563
+ var forgottenDevice = {
5564
+ ...pairedDevice,
5565
+ state: "offline",
5566
+ note: "SLICC on quay-studio no longer knows this seven. Pair it again."
5567
+ };
5568
+ var others = linkedDevices.filter((device) => device.id !== pairedDevice.id);
5375
5569
  function grant(device, key, allowed) {
5376
5570
  const access = { ...device.access, [key]: allowed };
5377
5571
  if (key === "view" && !allowed && "control" in access) access.control = false;
@@ -5395,6 +5589,16 @@ function linksFixtures(scenario, rotation = 0) {
5395
5589
  exit: null
5396
5590
  };
5397
5591
  }
5592
+ if (scenario === "pairing")
5593
+ return { links: { ...base, devices: others, pairing: { state: "idle" } }, exit: null };
5594
+ if (scenario === "pairing-notray")
5595
+ return { links: { devices: others, permission: null, pairing: { state: "idle" } }, exit: null };
5596
+ if (scenario === "forgotten") {
5597
+ return {
5598
+ links: { ...base, devices: [forgottenDevice, ...others], pairing: { state: "idle" } },
5599
+ exit: null
5600
+ };
5601
+ }
5398
5602
  if (scenario === "followers") return { links: { ...base, devices: followers }, exit: null };
5399
5603
  if (scenario === "none") return { links: { ...base, devices: [] }, exit: null };
5400
5604
  if (scenario === "prompt") {
@@ -5455,6 +5659,10 @@ var DummyNetwork = class extends Emitter {
5455
5659
  disconnectLeader;
5456
5660
  reconnectLeader;
5457
5661
  forgetLeader;
5662
+ pairComputer;
5663
+ confirmPairing;
5664
+ cancelPairing;
5665
+ #pairUrl = "";
5458
5666
  #leaders;
5459
5667
  #files;
5460
5668
  constructor(scenario, clock2, tailnet, links, files3, leaders) {
@@ -5472,6 +5680,9 @@ var DummyNetwork = class extends Emitter {
5472
5680
  this.retryLinks = () => this.#retry();
5473
5681
  this.mountFolder = (source) => this.#mountFolder(source);
5474
5682
  this.ejectFolder = (source) => this.#ejectFolder(source);
5683
+ this.pairComputer = (url) => this.#pair(url);
5684
+ this.confirmPairing = () => this.#confirmPairing();
5685
+ this.cancelPairing = () => this.#cancelPairing();
5475
5686
  this.#files = files3;
5476
5687
  files3?.on("mounts", (targets) => this.#mounted(targets));
5477
5688
  }
@@ -5653,6 +5864,38 @@ var DummyNetwork = class extends Emitter {
5653
5864
  };
5654
5865
  this.#emit();
5655
5866
  }
5867
+ #pairing(pairing, devices) {
5868
+ const links = this.#links;
5869
+ this.#links = { ...links, pairing, devices: devices ?? links.devices };
5870
+ this.#emit();
5871
+ }
5872
+ async #pair(url) {
5873
+ await this.#clock.sleep(4);
5874
+ if (!url.startsWith("http://127.0.0.1:")) throw new Error(pairingRefused);
5875
+ this.#pairUrl = url;
5876
+ this.#pairing({ state: "confirm", code: pairingCode });
5877
+ }
5878
+ async #confirmPairing() {
5879
+ this.#pairing({ state: "linking", code: pairingCode });
5880
+ await this.#clock.sleep(8);
5881
+ if (this.#links?.pairing?.state !== "linking") return;
5882
+ if (this.#pairUrl.includes("fail")) {
5883
+ this.#pairing({ state: "failed", code: pairingCode, error: pairingStopped });
5884
+ return;
5885
+ }
5886
+ const devices = this.#links.devices.filter(
5887
+ (device) => device.id !== pairedDevice.id
5888
+ );
5889
+ this.#pairing({ state: "linked", code: pairingCode, name: "SLICC on quay-studio" }, [
5890
+ pairedDevice,
5891
+ ...devices
5892
+ ]);
5893
+ }
5894
+ async #cancelPairing() {
5895
+ await this.#clock.sleep(2);
5896
+ this.#pairUrl = "";
5897
+ this.#pairing({ state: "idle" });
5898
+ }
5656
5899
  async #retry() {
5657
5900
  await this.#clock.sleep(4);
5658
5901
  const links = this.#links;
@@ -6483,7 +6726,7 @@ Done in 3.8s`
6483
6726
  // src/dummy/vault.ts
6484
6727
  var minute3 = 6e4;
6485
6728
  var hour3 = 60 * minute3;
6486
- var day4 = 24 * hour3;
6729
+ var day5 = 24 * hour3;
6487
6730
  var harbor = { domain: "api.harbor.example", header: "Authorization", methods: [], paths: [] };
6488
6731
  var pier = {
6489
6732
  domain: "packages.pier.example",
@@ -6504,7 +6747,7 @@ function vaultSecrets(now2 = Date.now()) {
6504
6747
  rules: [harbor],
6505
6748
  exits: ["proxy", "tailscale", "device:link-pier"],
6506
6749
  exec: false,
6507
- createdAt: now2 - 12 * day4,
6750
+ createdAt: now2 - 12 * day5,
6508
6751
  usedAt: now2 - 4 * minute3
6509
6752
  },
6510
6753
  {
@@ -6518,9 +6761,9 @@ function vaultSecrets(now2 = Date.now()) {
6518
6761
  rules: [pier],
6519
6762
  exec: "argv",
6520
6763
  execArgv: [["pier", "publish"]],
6521
- createdAt: now2 - 3 * day4,
6764
+ createdAt: now2 - 3 * day5,
6522
6765
  usedAt: now2 - 2 * hour3,
6523
- expiresAt: now2 + 3 * day4
6766
+ expiresAt: now2 + 3 * day5
6524
6767
  },
6525
6768
  {
6526
6769
  name: "TIDE_MAIL",
@@ -6547,7 +6790,7 @@ function vaultSecrets(now2 = Date.now()) {
6547
6790
  }
6548
6791
  ],
6549
6792
  exec: false,
6550
- createdAt: now2 - 20 * day4,
6793
+ createdAt: now2 - 20 * day5,
6551
6794
  expiresAt: now2 + 50 * minute3
6552
6795
  },
6553
6796
  {
@@ -6572,8 +6815,8 @@ function vaultSecrets(now2 = Date.now()) {
6572
6815
  domains: ["buoy.example"],
6573
6816
  rules: [{ domain: "buoy.example", header: "X-Buoy-Key", methods: ["GET"], paths: [] }],
6574
6817
  exec: "shell",
6575
- createdAt: now2 - 40 * day4,
6576
- removedAt: now2 - day4
6818
+ createdAt: now2 - 40 * day5,
6819
+ removedAt: now2 - day5
6577
6820
  }
6578
6821
  ];
6579
6822
  }
@@ -6590,7 +6833,7 @@ function accountRecords(now2 = Date.now()) {
6590
6833
  domains: ["docs.example"],
6591
6834
  rules: [{ domain: "docs.example", header: "Authorization", methods: [], paths: [] }],
6592
6835
  exec: false,
6593
- createdAt: now2 - 6 * day4,
6836
+ createdAt: now2 - 6 * day5,
6594
6837
  usedAt: now2 - 20 * minute3
6595
6838
  }
6596
6839
  ];
@@ -6663,7 +6906,7 @@ function vaultAudit(now2 = Date.now()) {
6663
6906
  type: "policy",
6664
6907
  seq: 8,
6665
6908
  id: "audit-8",
6666
- at: now2 - day4,
6909
+ at: now2 - day5,
6667
6910
  file: "/etc/slicc/secrets-policy.toml",
6668
6911
  sha256: "4e07408562bedb8b60ce05c1decfe3ad",
6669
6912
  accepted: true,
@@ -6681,7 +6924,7 @@ function vaultAudit(now2 = Date.now()) {
6681
6924
  type: "remove",
6682
6925
  seq: 7,
6683
6926
  id: "audit-7",
6684
- at: now2 - day4 - hour3,
6927
+ at: now2 - day5 - hour3,
6685
6928
  name: "BUOY_OLD_TOKEN"
6686
6929
  },
6687
6930
  {
@@ -6689,7 +6932,7 @@ function vaultAudit(now2 = Date.now()) {
6689
6932
  type: "seal",
6690
6933
  seq: 6,
6691
6934
  id: "audit-6",
6692
- at: now2 - 3 * day4,
6935
+ at: now2 - 3 * day5,
6693
6936
  name: "PIER_PUBLISH_TOKEN",
6694
6937
  source: "jerk:cone@link-pier",
6695
6938
  rotated: false
@@ -6702,7 +6945,7 @@ function vaultOlder(now2 = Date.now()) {
6702
6945
  type: "materialize",
6703
6946
  seq: 5,
6704
6947
  id: "audit-5",
6705
- at: now2 - 4 * day4,
6948
+ at: now2 - 4 * day5,
6706
6949
  name: "PIER_PUBLISH_TOKEN",
6707
6950
  uid: 1e3,
6708
6951
  tag: null,
@@ -6720,7 +6963,7 @@ function vaultOlder(now2 = Date.now()) {
6720
6963
  type: "policy",
6721
6964
  seq: 4,
6722
6965
  id: "audit-4",
6723
- at: now2 - 5 * day4,
6966
+ at: now2 - 5 * day5,
6724
6967
  file: "/etc/fnox/config.toml",
6725
6968
  sha256: "8f14e45fceea167a5a36dedd4bea2543",
6726
6969
  accepted: false,
@@ -6731,7 +6974,7 @@ function vaultOlder(now2 = Date.now()) {
6731
6974
  type: "restore",
6732
6975
  seq: 3,
6733
6976
  id: "audit-3",
6734
- at: now2 - 6 * day4,
6977
+ at: now2 - 6 * day5,
6735
6978
  name: "TIDE_MAIL",
6736
6979
  uid: 0,
6737
6980
  tag: null
@@ -6740,7 +6983,7 @@ function vaultOlder(now2 = Date.now()) {
6740
6983
  type: "mcp",
6741
6984
  seq: 2,
6742
6985
  id: "audit-2",
6743
- at: now2 - 7 * day4,
6986
+ at: now2 - 7 * day5,
6744
6987
  name: "DOCS_MCP_TOKEN",
6745
6988
  uid: 1e3,
6746
6989
  tag: "cone",
@@ -7185,6 +7428,13 @@ function vaultAccounts(accounts2) {
7185
7428
  function guestsPort(guests, time) {
7186
7429
  return guests === "off" ? {} : { guests: new DummyGuests(guests, time) };
7187
7430
  }
7431
+ function importPort(scenario, agent, time) {
7432
+ if (scenario === "off") return;
7433
+ const port = new DummyImport(scenario, agent, time);
7434
+ agent.importProfile = port.importProfile.bind(port);
7435
+ agent.importCancel = port.importCancel.bind(port);
7436
+ agent.importing = port.importing.bind(port);
7437
+ }
7188
7438
  function createDummyModel({
7189
7439
  delay = 30,
7190
7440
  storage = null,
@@ -7209,7 +7459,9 @@ function createDummyModel({
7209
7459
  readonly = "off",
7210
7460
  browser: scenario = "idle",
7211
7461
  sprinkles: sprinkles2 = "builtin",
7212
- monitor = "dummy"
7462
+ monitor = "dummy",
7463
+ import: imports = "off",
7464
+ login
7213
7465
  } = {}) {
7214
7466
  const time = clock(delay);
7215
7467
  const mount = mounts === "off" ? null : { scenario: mounts, point: mountPoint, files: mounted };
@@ -7232,6 +7484,7 @@ function createDummyModel({
7232
7484
  stop(agentId);
7233
7485
  browser.release(agentId);
7234
7486
  };
7487
+ importPort(imports, agent, time);
7235
7488
  if (hold !== "off") agent.setHold({ reason: hold, held: 2 });
7236
7489
  if (readonly !== "off") agent.setReadOnly(readOnlyText);
7237
7490
  const notice = readonly !== "off" ? "readonly" : notices;
@@ -7254,7 +7507,8 @@ function createDummyModel({
7254
7507
  storage,
7255
7508
  time,
7256
7509
  void 0,
7257
- providers === "none"
7510
+ providers === "none",
7511
+ login
7258
7512
  ),
7259
7513
  memory: new DummyMemory(memories, () => [
7260
7514
  { id: "global", label: "Everyone" },
@@ -7297,6 +7551,7 @@ export {
7297
7551
  DummyFollow,
7298
7552
  DummyGuestAgent,
7299
7553
  DummyGuests,
7554
+ DummyImport,
7300
7555
  DummyNetwork,
7301
7556
  DummyNotices,
7302
7557
  DummyTabs,
@@ -7310,6 +7565,7 @@ export {
7310
7565
  createGuestModel,
7311
7566
  followFixtures,
7312
7567
  forecastSprinkle,
7568
+ forgottenDevice,
7313
7569
  guestApproved,
7314
7570
  guestDeclined,
7315
7571
  guestLabel,
@@ -7321,6 +7577,13 @@ export {
7321
7577
  guestsPolicy,
7322
7578
  guestsRefused,
7323
7579
  guestsUnavailable,
7580
+ importBefore,
7581
+ importCancelled,
7582
+ importCones,
7583
+ importNotV6,
7584
+ importPreview,
7585
+ importReport,
7586
+ importTotal,
7324
7587
  joinUrl,
7325
7588
  leadersFixtures,
7326
7589
  linksFixtures,
@@ -7329,6 +7592,10 @@ export {
7329
7592
  otherGuest,
7330
7593
  packageFixtures,
7331
7594
  page,
7595
+ pairedDevice,
7596
+ pairingCode,
7597
+ pairingRefused,
7598
+ pairingStopped,
7332
7599
  tabsFixtures,
7333
7600
  tailnetFixtures,
7334
7601
  updateFixtures,