@bendyline/gezel 1.0.4 → 1.0.6

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.
@@ -1,4 +1,4 @@
1
- import { b as CraftbookDocError, c as CraftbookDoc, Q as ParsedGezel, S as ParsedReportAction, X as ReportActionParseIssue } from '../report-action-UJ-pJpZO.js';
1
+ import { b as CraftbookDocError, c as CraftbookDoc, S as ParsedGezel, U as ParsedReportAction, a1 as ReportActionParseIssue } from '../report-action-ClXIBtpU.js';
2
2
  import 'zod';
3
3
 
4
4
  interface CraftbookMarkdownParse {
@@ -428,7 +428,8 @@ var GateCheckSchema = z3.discriminatedUnion("kind", [
428
428
  z3.object({
429
429
  kind: z3.literal("totalMinBytes"),
430
430
  files: z3.array(z3.string().min(1)).min(1),
431
- bytes: z3.number().int().positive()
431
+ bytes: z3.number().int().positive(),
432
+ artifact: z3.boolean().optional()
432
433
  }),
433
434
  /**
434
435
  * At least `min` workspace files with one of `ext` exist (e.g. ≥3 images).
@@ -445,13 +446,15 @@ var GateCheckSchema = z3.discriminatedUnion("kind", [
445
446
  ext: z3.array(z3.string().min(1)).min(1),
446
447
  min: z3.number().int().positive(),
447
448
  dir: z3.string().optional(),
448
- verifyImageBytes: z3.boolean().optional()
449
+ verifyImageBytes: z3.boolean().optional(),
450
+ artifact: z3.boolean().optional()
449
451
  }),
450
452
  /** Inline `<style>` + linked `.css` in `file` (default index.html) clears `bytes`. */
451
453
  z3.object({
452
454
  kind: z3.literal("cssMinBytes"),
453
455
  bytes: z3.number().int().positive(),
454
- file: z3.string().optional()
456
+ file: z3.string().optional(),
457
+ artifact: z3.boolean().optional()
455
458
  }),
456
459
  /** A named content sniff passes on `file` (workspace, or the artifacts drawer when `artifact`). */
457
460
  z3.object({
@@ -466,7 +469,8 @@ var GateCheckSchema = z3.discriminatedUnion("kind", [
466
469
  file: z3.string().min(1),
467
470
  path: z3.string().min(1),
468
471
  value: GateJsonScalarSchema,
469
- label: z3.string().min(1).optional()
472
+ label: z3.string().min(1).optional(),
473
+ artifact: z3.boolean().optional()
470
474
  }),
471
475
  /** A CSV file has the expected header/row shape and optional picklist values. */
472
476
  z3.object({
@@ -476,7 +480,8 @@ var GateCheckSchema = z3.discriminatedUnion("kind", [
476
480
  exactColumns: z3.array(z3.string().min(1)).min(1).optional(),
477
481
  minRows: z3.number().int().nonnegative().optional(),
478
482
  consistentColumns: z3.boolean().optional(),
479
- allowedValues: z3.record(z3.string(), z3.array(z3.string().min(1)).min(1)).optional()
483
+ allowedValues: z3.record(z3.string(), z3.array(z3.string().min(1)).min(1)).optional(),
484
+ artifact: z3.boolean().optional()
480
485
  }),
481
486
  /** `file` matches `pattern` (regex), in the workspace or the artifacts drawer when `artifact`. */
482
487
  z3.object({
@@ -511,7 +516,8 @@ var GateCheckSchema = z3.discriminatedUnion("kind", [
511
516
  label: z3.string().min(1).optional()
512
517
  })
513
518
  ).min(1),
514
- flags: z3.string().optional()
519
+ flags: z3.string().optional(),
520
+ artifact: z3.boolean().optional()
515
521
  }),
516
522
  /**
517
523
  * Every inline `<script>` body in `file` (default index.html) parses as
@@ -523,7 +529,8 @@ var GateCheckSchema = z3.discriminatedUnion("kind", [
523
529
  */
524
530
  z3.object({
525
531
  kind: z3.literal("jsParses"),
526
- file: z3.string().optional()
532
+ file: z3.string().optional(),
533
+ artifact: z3.boolean().optional()
527
534
  }),
528
535
  /**
529
536
  * An in-process, zero-spawn static gate for an HTML deliverable: the document
@@ -534,7 +541,8 @@ var GateCheckSchema = z3.discriminatedUnion("kind", [
534
541
  */
535
542
  z3.object({
536
543
  kind: z3.literal("htmlLint"),
537
- file: z3.string().min(1)
544
+ file: z3.string().min(1),
545
+ artifact: z3.boolean().optional()
538
546
  }),
539
547
  /**
540
548
  * Named `node:` imports in `file` resolve to real builtin exports, and a
@@ -547,7 +555,8 @@ var GateCheckSchema = z3.discriminatedUnion("kind", [
547
555
  */
548
556
  z3.object({
549
557
  kind: z3.literal("esmImports"),
550
- file: z3.string().min(1)
558
+ file: z3.string().min(1),
559
+ artifact: z3.boolean().optional()
551
560
  }),
552
561
  /**
553
562
  * `file` parses as source code. For `.ts/.tsx/.js/.mjs/.cjs/.jsx` the
@@ -559,7 +568,8 @@ var GateCheckSchema = z3.discriminatedUnion("kind", [
559
568
  */
560
569
  z3.object({
561
570
  kind: z3.literal("sourceParses"),
562
- file: z3.string().min(1)
571
+ file: z3.string().min(1),
572
+ artifact: z3.boolean().optional()
563
573
  }),
564
574
  /**
565
575
  * The first Markdown table in `file` has the required header set and
@@ -601,6 +611,12 @@ var GateCheckSchema = z3.discriminatedUnion("kind", [
601
611
  * dependency-free files can run (node built-ins ok; the sandbox has no
602
612
  * npm tree): a `node:test`/`assert` file exits nonzero on failure,
603
613
  * which is exactly the contract.
614
+ *
615
+ * Alone among the file-reading checks this takes no `artifact` flag: it
616
+ * does not read through the swappable gate reader at all, it hands the
617
+ * path to the sandbox executor, which resolves against the workspace.
618
+ * Accepting the flag would parse fine and then silently execute the
619
+ * wrong tree — the exact failure mode the flag exists to prevent.
604
620
  */
605
621
  z3.object({
606
622
  kind: z3.literal("nodeRuns"),
@@ -639,8 +655,11 @@ var GateCheckSchema = z3.discriminatedUnion("kind", [
639
655
  }),
640
656
  /**
641
657
  * A PR-review coverage ledger must name every changed path materialized in
642
- * a connector corpus. The ledger is workspace JSON (`reviewedFiles` by
643
- * default); the source records live in the read-only artifacts drawer and
658
+ * a connector corpus. The ledger is JSON (`reviewedFiles` by default) in
659
+ * the workspace, or in the artifacts drawer when `artifact` — a review of
660
+ * a read-only checkout can only write the drawer, so omitting the flag
661
+ * here made the whole Pull Request Review book unsatisfiable on any
662
+ * writes-off project. The source records always live in the drawer and
644
663
  * carry their authoritative path in frontmatter. This prevents a polished
645
664
  * report from passing after only the first context-sized prefix was read.
646
665
  */
@@ -649,7 +668,49 @@ var GateCheckSchema = z3.discriminatedUnion("kind", [
649
668
  file: z3.string().min(1),
650
669
  corpusDir: z3.string().min(1),
651
670
  reviewedField: z3.string().min(1).optional(),
652
- recordField: z3.string().min(1).optional()
671
+ recordField: z3.string().min(1).optional(),
672
+ artifact: z3.boolean().optional(),
673
+ /**
674
+ * JSON array of the exact changed paths THIS ledger must cover, as a
675
+ * string — narrows the check from the whole corpus to one slice of it.
676
+ * Written for declarative fanout: a child reviewing batch 2 of 3 gets
677
+ * `"{{paths}}"` from its per-item context and is gated on its own 25
678
+ * files, not on the 68 nobody handed it. Without this a batch child
679
+ * can never pass its own gate, and coverage can only be enforced
680
+ * after a merge — far downstream of the child that under-delivered.
681
+ *
682
+ * Fails closed on anything that is not a JSON array of strings,
683
+ * including an uninterpolated `{{…}}` token: a mis-scoped coverage
684
+ * check that silently widens back to the full corpus would reject
685
+ * every child forever with a verdict none of them can act on.
686
+ */
687
+ expectPaths: z3.string().min(1).optional()
688
+ }),
689
+ /**
690
+ * A fanout-input batch file must reproduce a connector corpus manifest's own
691
+ * batch array exactly — same count, same ordinals, same paths, in order.
692
+ *
693
+ * The upstream sibling of {@link corpusCoverage}: that check proves the work
694
+ * covered the corpus, this one proves the *plan* did. A batch file is the
695
+ * spawn host's `overFile`, so a batch dropped here is never reviewed by
696
+ * anyone and never appears in any coverage ledger. `json-valid` + `minBytes`
697
+ * cannot see it: a batch array truncated at the model's output cap is still
698
+ * syntactically perfect JSON. Wild-caught on a 509-file PR whose scope step
699
+ * published 10 of 21 batches — 259 files silently out of scope, and the run
700
+ * then deadlocked eight attempts deep in the downstream merge gate, which is
701
+ * the wrong place to learn it and the one place that cannot fix it.
702
+ */
703
+ z3.object({
704
+ kind: z3.literal("corpusBatches"),
705
+ file: z3.string().min(1),
706
+ corpusDir: z3.string().min(1),
707
+ /** Filename suffix identifying the manifest inside the corpus. */
708
+ manifestSuffix: z3.string().min(1).optional(),
709
+ /** Manifest field holding the authoritative batch array. */
710
+ itemsField: z3.string().min(1).optional(),
711
+ /** Manifest field holding the total item count the batches must cover. */
712
+ totalField: z3.string().min(1).optional(),
713
+ artifact: z3.boolean().optional()
653
714
  }),
654
715
  /**
655
716
  * The H1 slide titles in `file` must match the numbered slide headings in
@@ -662,7 +723,8 @@ var GateCheckSchema = z3.discriminatedUnion("kind", [
662
723
  file: z3.string().min(1),
663
724
  outlineFile: z3.string().min(1),
664
725
  /** Read outlineFile from artifacts while file uses the check's primary surface. */
665
- outlineArtifact: z3.boolean().optional()
726
+ outlineArtifact: z3.boolean().optional(),
727
+ artifact: z3.boolean().optional()
666
728
  }),
667
729
  /**
668
730
  * Named facts in `file` must come from authorized sources: each fact
@@ -3009,6 +3071,26 @@ var ChatMessageToolCallSchema = z17.object({
3009
3071
  addedLines: z17.number().int().nonnegative().optional(),
3010
3072
  removedLines: z17.number().int().nonnegative().optional()
3011
3073
  });
3074
+ var ChatSessionSourceSchema = z17.object({
3075
+ kind: z17.literal("external"),
3076
+ /** Stable integration id, e.g. `pi`. */
3077
+ appId: z17.string().min(1),
3078
+ /** Human-facing application name, e.g. `Pi`. */
3079
+ appName: z17.string().min(1),
3080
+ /** The external application's stable conversation/session identifier. */
3081
+ externalConversationId: z17.string().min(1),
3082
+ /** External threads are ledger views; the owning app controls replies. */
3083
+ readOnly: z17.literal(true),
3084
+ /** Working-directory hint supplied by the external app, when available. */
3085
+ workingDirectory: z17.string().optional(),
3086
+ /** Project id/name hint supplied by the external app, when available. */
3087
+ projectHint: z17.string().optional()
3088
+ });
3089
+ var ReferencedFileKindSchema = z17.enum(["artifact", "workspace"]);
3090
+ var ReferencedFileSchema = z17.object({
3091
+ kind: ReferencedFileKindSchema,
3092
+ path: z17.string()
3093
+ });
3012
3094
  var ChatMessageSchema = z17.object({
3013
3095
  role: z17.enum(["user", "assistant"]),
3014
3096
  content: z17.string(),
@@ -3018,17 +3100,27 @@ var ChatMessageSchema = z17.object({
3018
3100
  gezelName: z17.string()
3019
3101
  }).optional(),
3020
3102
  /**
3021
- * Artifact paths (relative to the project's `artifacts/` directory)
3022
- * the assistant reply referenced in its body text. Populated on save
3023
- * by the server-side reference parser, and used by the chat UI to
3024
- * render a chip row under the bubble and to linkify inline code spans
3025
- * that match a real artifact. Back-stops Copilot's tool-call
3026
- * blindspot and any "AI wrote a file outside the MCP tools" paths.
3103
+ * Real files the assistant reply named in its body text — artifacts
3104
+ * drawer and workspace tree alike. Populated on save by the
3105
+ * server-side reference parser, and used by the chat UI to render a
3106
+ * chip row under the bubble and to linkify inline code spans that
3107
+ * match a real file. Back-stops Copilot's tool-call blindspot and any
3108
+ * "AI wrote a file outside the MCP tools" path.
3109
+ */
3110
+ referencedFiles: z17.array(ReferencedFileSchema).optional(),
3111
+ /**
3112
+ * The artifact-only projection of {@link referencedFiles}, still
3113
+ * written so an older `@bendyline/gezel-cli` (or any out-of-tree
3114
+ * reader) keeps working against a session file this daemon wrote.
3115
+ * Read `referencedFiles` in new code — this field cannot represent a
3116
+ * workspace path.
3117
+ *
3118
+ * @deprecated superseded by `referencedFiles`
3027
3119
  */
3028
3120
  referencedArtifacts: z17.array(z17.string()).optional(),
3029
3121
  /**
3030
3122
  * Task refs (`<projectId>/<num>`) the assistant reply mentioned. Same
3031
- * shape as `referencedArtifacts` — populated on save, gated on the
3123
+ * shape as `referencedFiles` — populated on save, gated on the
3032
3124
  * ref actually existing in the task store, surfaced in the chat
3033
3125
  * bubble as click-through chips. Catches the common "I created task
3034
3126
  * gezel-ux-roadmap/2" mention so the user can jump to it without
@@ -3121,6 +3213,25 @@ var ChatMessageSchema = z17.object({
3121
3213
  * renders a small "nudged" chip on the bubble.
3122
3214
  */
3123
3215
  nudge: z17.boolean().optional(),
3216
+ /**
3217
+ * The machinery — not the human — authored this `role: 'user'` message.
3218
+ * Task dispatch seeds, step handoffs, and project-page reaction seeds
3219
+ * all arrive as user turns because that is the only role a provider
3220
+ * will accept mid-conversation, but the person never typed them.
3221
+ *
3222
+ * Display-only marker: the model still sees an ordinary user turn, and
3223
+ * the UI labels the bubble **System** instead of "You". Without it the
3224
+ * flagship Home thread opened with "YOU · call `advance_task_step` to
3225
+ * hand off" — internal plumbing quoted back at the user in their own
3226
+ * voice, which reads as a bug and undoes the warm-companion framing the
3227
+ * whole product rests on.
3228
+ *
3229
+ * Set from the turn's `messageOrigin` (service-side `TurnMessageOrigin`);
3230
+ * an enum rather than a boolean so a future dispatch/reaction split can
3231
+ * widen it without a second field. Messages written before this field
3232
+ * existed are inferred at read time — see `Store.listTimeline`.
3233
+ */
3234
+ origin: z17.enum(["system"]).optional(),
3124
3235
  /**
3125
3236
  * Persistent warnings attached to this assistant turn — fabricated
3126
3237
  * tool-use detection, degraded provider state, etc. The streaming
@@ -3215,6 +3326,12 @@ var ChatEventSchema = z17.discriminatedUnion("type", [
3215
3326
  */
3216
3327
  z17.object({ type: z17.literal("reasoning_delta"), content: z17.string() }),
3217
3328
  z17.object({ type: z17.literal("complete"), message: ChatMessageSchema }),
3329
+ /**
3330
+ * The user submitted a message, but a cold provider session is still being
3331
+ * created. Project timelines render this as a temporary pending row until
3332
+ * the durable `user_message` or a terminal `error` arrives.
3333
+ */
3334
+ z17.object({ type: z17.literal("user_message_pending"), preview: z17.string() }),
3218
3335
  /**
3219
3336
  * Emitted right after the user's message is appended to the session
3220
3337
  * record. The legacy session-scoped UI inserted user messages locally
@@ -3538,11 +3655,27 @@ var ChatEventSchema = z17.discriminatedUnion("type", [
3538
3655
  phase: z17.enum(["starting", "loading_model", "prefill", "generating", "ready"]),
3539
3656
  detail: z17.string().optional(),
3540
3657
  progress: z17.number().min(0).max(1).optional(),
3541
- ttftMs: z17.number().int().nonnegative().optional()
3658
+ ttftMs: z17.number().int().nonnegative().optional(),
3659
+ /**
3660
+ * Exact cumulative completion tokens decoded so far this turn, as the
3661
+ * engine counts them (llama-server `timings.predicted_n`, MLX's
3662
+ * streamed `usage.output_tokens`). Present only on `generating`, and
3663
+ * only for engines that publish a running counter — the UI falls back
3664
+ * to an explicitly-approximate character estimate when it is absent,
3665
+ * so this field is what lets a readout drop its "≈".
3666
+ */
3667
+ outputTokens: z17.number().int().nonnegative().optional(),
3668
+ /**
3669
+ * Exact decode rate right now, engine-measured over the generation
3670
+ * phase alone (llama-server `timings.predicted_per_second`, MLX's
3671
+ * `generation_tps`). Same contract as `outputTokens`: absent means the
3672
+ * UI must derive and mark its own estimate.
3673
+ */
3674
+ tokensPerSec: z17.number().nonnegative().optional()
3542
3675
  }),
3543
3676
  /**
3544
- * Per-turn telemetry for locally-hosted providers (llama-cpp +
3545
- * Ollama). Emitted once at turn end with the concrete token counts
3677
+ * Per-turn telemetry for locally-hosted providers (llama-cpp, Ollama,
3678
+ * MLX, and DS4). Emitted once at turn end with the concrete token counts
3546
3679
  * the UI needs for a speed readout — input tokens, output tokens,
3547
3680
  * wall-clock duration, and tokens-per-second on the generation
3548
3681
  * phase. UI accumulates these in a rolling window to show an
@@ -3556,6 +3689,13 @@ var ChatEventSchema = z17.discriminatedUnion("type", [
3556
3689
  z17.object({
3557
3690
  type: z17.literal("turn_stats"),
3558
3691
  provider: z17.enum(["llama-cpp", "ollama", "mlx", "ds4"]),
3692
+ /**
3693
+ * Model that generated the turn, as the session recorded it. Lets the
3694
+ * UI bucket speed by model instead of averaging a 27B and a 4B into
3695
+ * one meaningless number. Optional because older daemons (and remote
3696
+ * peers on an older wire) don't send it.
3697
+ */
3698
+ model: z17.string().optional(),
3559
3699
  promptTokens: z17.number().int().nonnegative(),
3560
3700
  completionTokens: z17.number().int().nonnegative(),
3561
3701
  durationMs: z17.number().int().nonnegative(),
@@ -3716,6 +3856,19 @@ var ChatEventSchema = z17.discriminatedUnion("type", [
3716
3856
  state: z17.enum(["started", "ended", "failed"]),
3717
3857
  generatedAt: z17.string().optional()
3718
3858
  }),
3859
+ /**
3860
+ * Global signal from the ambient dashboard generator. `ended` means a
3861
+ * fresh PNG landed on disk (filename is the dated file under
3862
+ * `~/.gezel/ambient/`); the Electron shell reacts to it by re-applying
3863
+ * the wallpaper when the user opted in, and the Settings card
3864
+ * refreshes its preview.
3865
+ */
3866
+ z17.object({
3867
+ type: z17.literal("ambient_dashboard"),
3868
+ state: z17.enum(["started", "ended", "failed"]),
3869
+ generatedAt: z17.string().optional(),
3870
+ filename: z17.string().optional()
3871
+ }),
3719
3872
  /**
3720
3873
  * Global (history-free) heartbeat from the boekwachter indexing loops —
3721
3874
  * workspace scans, AI enrichment batches, weekly digests. Drives the live
@@ -3739,6 +3892,8 @@ var ChatEventEnvelopeSchema = z17.object({
3739
3892
  sessionId: z17.string(),
3740
3893
  gezelId: z17.string(),
3741
3894
  projectId: z17.string(),
3895
+ /** Present for externally-owned read-only threads, including live turns. */
3896
+ sessionSource: ChatSessionSourceSchema.optional(),
3742
3897
  event: ChatEventSchema
3743
3898
  });
3744
3899
 
package/dist/paths.d.ts CHANGED
@@ -314,6 +314,18 @@ declare function projectActivityFile(root: string, projectId: string): string;
314
314
  declare function meesterStatusDir(root: string): string;
315
315
  declare function meesterStatusFile(root: string): string;
316
316
  declare function meesterStatusStateFile(root: string): string;
317
+ /**
318
+ * Home for the ambient dashboard — meester-generated PNG snapshots of the
319
+ * whole workshop, written for the OS ambient-display integration (wallpaper
320
+ * rotation points here). Holds dated `dashboard-*.png` files, a stable
321
+ * `latest.png` copy, the generator's `state.json`, and the Electron
322
+ * applier's `display-state.json` + `applied-a/b.png` slots. Per-user only —
323
+ * never under machineSharedHome: wallpaper is user-session state.
324
+ */
325
+ declare function ambientDir(root: string): string;
326
+ declare function ambientDashboardStateFile(root: string): string;
327
+ declare function ambientDashboardLatestFile(root: string): string;
328
+ declare function ambientDisplayStateFile(root: string): string;
317
329
  declare function projectTasksDir(root: string, projectId: string, external?: ExternalFolders): string;
318
330
  declare function projectTaskNextIdFile(root: string, projectId: string, external?: ExternalFolders): string;
319
331
  declare function projectTaskDir(root: string, projectId: string, num: number, external?: ExternalFolders): string;
@@ -432,7 +444,16 @@ declare function fallbackProjectIndexDir(root: string, projectId: string): strin
432
444
  * retain the historical `.gezel/index/` placement; machine-shared workspaces
433
445
  * always use the account-private fallback to prevent cross-daemon SQLite use.
434
446
  */
435
- declare function projectContentIndexDbFile(root: string, projectId: string, workspaceDir: string): string;
447
+ declare function projectContentIndexDbFile(root: string, projectId: string, workspaceDir: string, opts?: {
448
+ /**
449
+ * Keep the database out of the workspace even though it is writable.
450
+ * The shared document library's workspace is the user's own documents
451
+ * folder, which may be a cloud-synced directory (OneDrive/Dropbox):
452
+ * mutable SQLite must not ride a sync client, and the user must not find
453
+ * a `.gezel/` directory in a folder they browse in Finder.
454
+ */
455
+ forceHomeSide?: boolean;
456
+ }): string;
436
457
  /**
437
458
  * Derived FTS index over a project's artifact corpora (connector records under
438
459
  * `artifacts/data/**`). Always in the account-private sidecar, never inside
@@ -585,6 +606,21 @@ declare function keurmeesterCasesDir(root: string): string;
585
606
  declare function keurmeesterDigestsDir(root: string): string;
586
607
  /** Digest idempotency state (last generated date, last case offset). */
587
608
  declare function keurmeesterDigestStatePath(root: string): string;
609
+ /**
610
+ * Root of every downloaded engine payload: per-engine model stores, the
611
+ * verified native binary releases, the HuggingFace cache, uv virtualenvs,
612
+ * and per-engine scratch. This is the bulk of a heavy install's disk use —
613
+ * on a working machine it dwarfs everything else in the home directory
614
+ * combined. Owned by the engine/model managers, not the Store.
615
+ */
616
+ declare function enginesRoot(root: string): string;
617
+ /**
618
+ * Pinned node + pnpm runtimes the supervisor extracts so packaged installs
619
+ * need no system toolchain. The daemon executes through these, so nothing
620
+ * daemon-side may delete them; the platform uninstaller owns removal and the
621
+ * supervisor re-extracts on a sentinel mismatch.
622
+ */
623
+ declare function binRuntimeRoot(root: string): string;
588
624
  /**
589
625
  * Read the on-disk `config.json` without instantiating a Store. Used at
590
626
  * boot to discover `externalFolders` before the Store is constructed
@@ -598,4 +634,4 @@ declare function keurmeesterDigestStatePath(root: string): string;
598
634
  */
599
635
  declare function readConfigRaw(root: string): Promise<Record<string, unknown>>;
600
636
 
601
- export { type ExternalFolders, type GezelPaths, MACHINE_SHARED_MARKER, type MachineStorageScope, PROJECT_SHADOW_DIR_NAME, activeMachineSharedHome, backupsDir, channelsDir, craftbookShardPrefix, craftbookTemplateDir, craftbookTemplateManifestFile, craftbookTemplateScriptFile, craftbookTemplateScriptsDir, craftbookTemplateVersionDir, craftbookTemplateVersionManifestFile, craftbookTemplatesRoot, daemonTransactionsRoot, deviceIdentityFile, fallbackProjectIndexDir, fallbackProjectVillageFile, foldersStateDir, gezelDir, gezelGrowthPath, gezelHome, gezelLocalDir, gezelMemoriesDir, gezelPaths, gezelPoppetjePath, gezelSessionFile, gezelSessionsDir, gezelStorageScope, gezelToolsPath, gezelToolsetsFile, gezelToolsetsInstallDir, gildeLiveRoot, gildeLiveStateFile, gildeLiveVersionDir, gildeLiveVersionsDir, globalHistoryFile, globalIndexDbFile, globalIndexDir, keurmeesterCasesDir, keurmeesterDigestStatePath, keurmeesterDigestsDir, keurmeesterDir, machineSharedGezelDir, machineSharedHome, machineSharedMarkerFile, machineSharedProjectDir, meesterStatusDir, meesterStatusFile, meesterStatusStateFile, pendingGrantsFile, playwrightBrowsersDir, projectActivityFile, projectArtifactsDir, projectArtifactsIndexDbFile, projectBoekwachterIssuesFile, projectCodeReviewsFile, projectContentIndexDbFile, projectCreateTransactionsRoot, projectDir, projectDocsDir, projectFindingLifecycleFile, projectHistoryFile, projectIndexDir, projectInternalGithubDir, projectLocalConfigFile, projectLocalCraftbookDir, projectLocalCraftbooksRoot, projectLocalDir, projectLocalFilesDir, projectLocalGezelDir, projectLocalGezelsRoot, projectLocalImportsFile, projectLocalIndexDbFile, projectLocalIndexDir, projectLocalPendingImportsFile, projectLocalQuarantineDir, projectLocalRoot, projectLocalVillageFile, projectMemoriesDir, projectMemoryIndexDir, projectMetaFile, projectPrivateDir, projectQuestionsFile, projectReportActionsFile, projectScriptFile, projectScriptRunFile, projectScriptRunsDir, projectScriptsDir, projectShadowDir, projectStorageDir, projectStorageScope, projectTaskAboutFile, projectTaskDir, projectTaskFile, projectTaskNextIdFile, projectTaskNotesFile, projectTasksDir, projectTerminalFile, projectTerminalsDir, projectToolsetsFile, projectToolsetsInstallDir, projectTypeDir, projectTypeManifestFile, projectTypeShardPrefix, projectTypeVersionDir, projectTypeVersionManifestFile, projectTypesRoot, readConfigRaw, remotesFile, secretsFile, secretsKeyFile, sharedCloneDir, sharedClonesRoot, sharedToolsetsFile, sharedToolsetsInstallDir, systemInstalledToolsetsFile, systemToolsetsFile, systemToolsetsInstallDir, tokensFile, toolsetConfigFile, toolsetConfigsDir, userGezelDir, userProjectDir, userScriptFile, userScriptsDir };
637
+ export { type ExternalFolders, type GezelPaths, MACHINE_SHARED_MARKER, type MachineStorageScope, PROJECT_SHADOW_DIR_NAME, activeMachineSharedHome, ambientDashboardLatestFile, ambientDashboardStateFile, ambientDir, ambientDisplayStateFile, backupsDir, binRuntimeRoot, channelsDir, craftbookShardPrefix, craftbookTemplateDir, craftbookTemplateManifestFile, craftbookTemplateScriptFile, craftbookTemplateScriptsDir, craftbookTemplateVersionDir, craftbookTemplateVersionManifestFile, craftbookTemplatesRoot, daemonTransactionsRoot, deviceIdentityFile, enginesRoot, fallbackProjectIndexDir, fallbackProjectVillageFile, foldersStateDir, gezelDir, gezelGrowthPath, gezelHome, gezelLocalDir, gezelMemoriesDir, gezelPaths, gezelPoppetjePath, gezelSessionFile, gezelSessionsDir, gezelStorageScope, gezelToolsPath, gezelToolsetsFile, gezelToolsetsInstallDir, gildeLiveRoot, gildeLiveStateFile, gildeLiveVersionDir, gildeLiveVersionsDir, globalHistoryFile, globalIndexDbFile, globalIndexDir, keurmeesterCasesDir, keurmeesterDigestStatePath, keurmeesterDigestsDir, keurmeesterDir, machineSharedGezelDir, machineSharedHome, machineSharedMarkerFile, machineSharedProjectDir, meesterStatusDir, meesterStatusFile, meesterStatusStateFile, pendingGrantsFile, playwrightBrowsersDir, projectActivityFile, projectArtifactsDir, projectArtifactsIndexDbFile, projectBoekwachterIssuesFile, projectCodeReviewsFile, projectContentIndexDbFile, projectCreateTransactionsRoot, projectDir, projectDocsDir, projectFindingLifecycleFile, projectHistoryFile, projectIndexDir, projectInternalGithubDir, projectLocalConfigFile, projectLocalCraftbookDir, projectLocalCraftbooksRoot, projectLocalDir, projectLocalFilesDir, projectLocalGezelDir, projectLocalGezelsRoot, projectLocalImportsFile, projectLocalIndexDbFile, projectLocalIndexDir, projectLocalPendingImportsFile, projectLocalQuarantineDir, projectLocalRoot, projectLocalVillageFile, projectMemoriesDir, projectMemoryIndexDir, projectMetaFile, projectPrivateDir, projectQuestionsFile, projectReportActionsFile, projectScriptFile, projectScriptRunFile, projectScriptRunsDir, projectScriptsDir, projectShadowDir, projectStorageDir, projectStorageScope, projectTaskAboutFile, projectTaskDir, projectTaskFile, projectTaskNextIdFile, projectTaskNotesFile, projectTasksDir, projectTerminalFile, projectTerminalsDir, projectToolsetsFile, projectToolsetsInstallDir, projectTypeDir, projectTypeManifestFile, projectTypeShardPrefix, projectTypeVersionDir, projectTypeVersionManifestFile, projectTypesRoot, readConfigRaw, remotesFile, secretsFile, secretsKeyFile, sharedCloneDir, sharedClonesRoot, sharedToolsetsFile, sharedToolsetsInstallDir, systemInstalledToolsetsFile, systemToolsetsFile, systemToolsetsInstallDir, tokensFile, toolsetConfigFile, toolsetConfigsDir, userGezelDir, userProjectDir, userScriptFile, userScriptsDir };
package/dist/paths.js CHANGED
@@ -286,6 +286,18 @@ function meesterStatusFile(root) {
286
286
  function meesterStatusStateFile(root) {
287
287
  return join(meesterStatusDir(root), "state.json");
288
288
  }
289
+ function ambientDir(root) {
290
+ return join(root, "ambient");
291
+ }
292
+ function ambientDashboardStateFile(root) {
293
+ return join(ambientDir(root), "state.json");
294
+ }
295
+ function ambientDashboardLatestFile(root) {
296
+ return join(ambientDir(root), "latest.png");
297
+ }
298
+ function ambientDisplayStateFile(root) {
299
+ return join(ambientDir(root), "display-state.json");
300
+ }
289
301
  function projectTasksDir(root, projectId, external) {
290
302
  return join(projectDir(root, projectId, external), "tasks");
291
303
  }
@@ -382,8 +394,8 @@ function projectLocalQuarantineDir(workspaceDir) {
382
394
  function fallbackProjectIndexDir(root, projectId) {
383
395
  return join(projectPrivateDir(root, projectId), "index");
384
396
  }
385
- function projectContentIndexDbFile(root, projectId, workspaceDir) {
386
- return projectStorageScope(root, projectId) === "machine-shared" ? join(fallbackProjectIndexDir(root, projectId), "index.db") : projectLocalIndexDbFile(workspaceDir);
397
+ function projectContentIndexDbFile(root, projectId, workspaceDir, opts = {}) {
398
+ return opts.forceHomeSide || projectStorageScope(root, projectId) === "machine-shared" ? join(fallbackProjectIndexDir(root, projectId), "index.db") : projectLocalIndexDbFile(workspaceDir);
387
399
  }
388
400
  function projectArtifactsIndexDbFile(root, projectId) {
389
401
  return join(fallbackProjectIndexDir(root, projectId), "artifacts.db");
@@ -497,6 +509,12 @@ function keurmeesterDigestsDir(root) {
497
509
  function keurmeesterDigestStatePath(root) {
498
510
  return join(keurmeesterDir(root), "digest-state.json");
499
511
  }
512
+ function enginesRoot(root) {
513
+ return join(root, "engines");
514
+ }
515
+ function binRuntimeRoot(root) {
516
+ return join(root, "bin");
517
+ }
500
518
  async function readConfigRaw(root) {
501
519
  const { readFile } = await import("fs/promises");
502
520
  try {
@@ -510,7 +528,12 @@ export {
510
528
  MACHINE_SHARED_MARKER,
511
529
  PROJECT_SHADOW_DIR_NAME,
512
530
  activeMachineSharedHome,
531
+ ambientDashboardLatestFile,
532
+ ambientDashboardStateFile,
533
+ ambientDir,
534
+ ambientDisplayStateFile,
513
535
  backupsDir,
536
+ binRuntimeRoot,
514
537
  channelsDir,
515
538
  craftbookShardPrefix,
516
539
  craftbookTemplateDir,
@@ -522,6 +545,7 @@ export {
522
545
  craftbookTemplatesRoot,
523
546
  daemonTransactionsRoot,
524
547
  deviceIdentityFile,
548
+ enginesRoot,
525
549
  fallbackProjectIndexDir,
526
550
  fallbackProjectVillageFile,
527
551
  foldersStateDir,