@bitcobblers/wod-wiki-wql 0.45.2167 → 0.47.2169

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/index.d.cts CHANGED
@@ -44,7 +44,7 @@ type WqlTagKey = (typeof WQL_TAG_KEYS)[number];
44
44
  * `catalog:` is retired (ticket 08 — the notebook plane and the
45
45
  * `notebook:` filter replace it) and `has:` was removed from the
46
46
  * declared vocabulary: it had no executor and the composer withheld it. */
47
- declare const WQL_CONTENT_ONLY_KEYS: readonly ["type", "text", "source", "notebook", "contributes"];
47
+ declare const WQL_CONTENT_ONLY_KEYS: readonly ["type", "text", "source", "notebook", "contributes", "feed", "subscribed"];
48
48
  /** Filter keys the effort registry can resolve (runFindEffort) — anything
49
49
  * else on find:effort is ignored and reported as an advisory. */
50
50
  declare const WQL_EFFORT_FILTER_KEYS: readonly ["effort", "discipline", "intensity", "origin", "text"];
@@ -130,7 +130,7 @@ type WqlResultPlane = (typeof WQL_RESULT_PLANES)[number];
130
130
  * and `has:` are gone (ticket 08): `catalog:` → `notebook:`, `has:` had no
131
131
  * executor. `contributes:` is the tag plane's contribution filter — a
132
132
  * contribution is never a `tags:` label filter. */
133
- declare const WQL_CONTENT_FILTER_KEYS: readonly ["type", "text", "source", "notebook", "page", "contributes", "domain", "format", "equipment", "quality", "intent", "effort", "discipline", "intensity", "grade", "note", "page", "origin", "grain", "metric", "block", "result", "tags"];
133
+ declare const WQL_CONTENT_FILTER_KEYS: readonly ["type", "text", "source", "notebook", "page", "contributes", "feed", "subscribed", "domain", "format", "equipment", "quality", "intent", "effort", "discipline", "intensity", "grade", "note", "page", "origin", "grain", "metric", "block", "result", "tags"];
134
134
  type WqlContentFilterKey = (typeof WQL_CONTENT_FILTER_KEYS)[number];
135
135
  /**
136
136
  * Composer source planes (issue #838, decision #836): the single `source`
@@ -160,7 +160,7 @@ type WqlKeyword = (typeof WQL_KEYWORDS)[number];
160
160
  * results and the view groups them, ordered and multi-dim. The find tables
161
161
  * (segment/event) group inside the executor over selected columns instead.
162
162
  */
163
- declare const CONTENT_GROUPING_DIMENSIONS: readonly ["date", "day", "week", "month", "year", "discipline", "origin", "source", "notebook", "kind", "type", "tag"];
163
+ declare const CONTENT_GROUPING_DIMENSIONS: readonly ["date", "day", "week", "month", "year", "discipline", "origin", "source", "notebook", "kind", "type", "tag", "feed"];
164
164
  /** Guided clause types, including structural clauses honored by their consumers. */
165
165
  declare function allowedFilterTypesForTarget(target: string, family: 'find' | 'aggregate'): ReadonlySet<string>;
166
166
  /** Suggested filter keys. Fact-backed queries also accept custom dimension keys. */
@@ -1168,6 +1168,8 @@ interface QueryServiceStores {
1168
1168
  notes: Note[];
1169
1169
  } | undefined;
1170
1170
  };
1171
+ /** Optional notebook subscription checker for feed-owned notes/notebooks. */
1172
+ isNotebookSubscribed?: (feedId: string, chunkId: string) => boolean;
1171
1173
  }
1172
1174
 
1173
1175
  /**
@@ -1250,6 +1252,25 @@ declare function notebookOfItem(item: {
1250
1252
  * tier 1, so it is editable while its origin stays visible.
1251
1253
  */
1252
1254
  declare function notebookOriginOfItem(item: Parameters<typeof notebookOfItem>[0]): NotebookOrigin | undefined;
1255
+ declare function feedIdOfItem(item: {
1256
+ feedSourceId?: string;
1257
+ seedChunkId?: string;
1258
+ sourcePath?: string;
1259
+ notebookId?: string;
1260
+ tags?: readonly string[];
1261
+ }): string;
1262
+ declare function chunkIdOfItem(item: {
1263
+ seedChunkId?: string;
1264
+ sourcePath?: string;
1265
+ notebookId?: string;
1266
+ tags?: readonly string[];
1267
+ }): string | undefined;
1268
+ declare function isItemSubscribed(item: Parameters<typeof notebookOfItem>[0] & {
1269
+ feedSourceId?: string;
1270
+ seedChunkId?: string;
1271
+ seedOrigin?: string;
1272
+ origin?: string;
1273
+ }, isNotebookSubscribedFn?: (feedId: string, chunkId: string) => boolean): boolean;
1253
1274
  /**
1254
1275
  * Storage-identity shape per WQL source kind — THE one table of `sourceId`
1255
1276
  * prefixes and exact literals. The JS residual filter (`sourceMatches`) and
@@ -1387,6 +1408,7 @@ interface FindOptions {
1387
1408
  anchorNow?: number;
1388
1409
  /** Captured execution context (ticket 12). */
1389
1410
  context?: ExecutionContext;
1411
+ isNotebookSubscribed?: (feedId: string, chunkId: string) => boolean;
1390
1412
  }
1391
1413
  interface QueryResult {
1392
1414
  parsed: ParsedAggregateQuery;
@@ -1461,6 +1483,7 @@ declare class QueryService {
1461
1483
  private readonly pageStore?;
1462
1484
  private readonly relationStore?;
1463
1485
  private readonly datasetStore?;
1486
+ private readonly isNotebookSubscribed?;
1464
1487
  private blockEffortsStore;
1465
1488
  private tagsStore;
1466
1489
  private noteTagsStore;
@@ -2288,13 +2311,13 @@ declare function migrateLegacyDashboardBodies(raw: string): string;
2288
2311
  * Auto-generated build version metadata.
2289
2312
  * Do not edit directly; updated by scripts/stamp-version.ts
2290
2313
  */
2291
- declare const VERSION = "0.45.2167";
2292
- declare const GIT_SHA = "d9859fd";
2293
- declare const BUILD_TIME = "2026-10-26T20:26:47.975Z";
2314
+ declare const VERSION = "0.47.2169";
2315
+ declare const GIT_SHA = "388d659";
2316
+ declare const BUILD_TIME = "2026-10-26T23:06:14.030Z";
2294
2317
  declare const SEMVER: {
2295
- readonly version: "0.45.2167";
2296
- readonly gitSha: "d9859fd";
2297
- readonly buildTime: "2026-10-26T20:26:47.975Z";
2318
+ readonly version: "0.47.2169";
2319
+ readonly gitSha: "388d659";
2320
+ readonly buildTime: "2026-10-26T23:06:14.030Z";
2298
2321
  };
2299
2322
 
2300
- export { type Aggregator, type AnyParsedQuery, BUILD_TIME, type BlockQueryStore, CONTENT_GROUPING_DIMENSIONS, type CatalogFieldSuggestion, type CatalogValueSuggestion, type ComparisonOp, DASHBOARD_GRID_MAX_COLS, DASHBOARD_WIDGET_TYPES, DEFAULT_DASHBOARD_TITLE, DISCIPLINE_FACTORS, type DashboardDocument, type DashboardMeta, type DashboardParsedSection, type DashboardSectionInput, type DashboardToken, type DashboardWidget, type DashboardWidgetType, type DocumentAssignment, type DocumentDefaults, type DocumentFormula, type DocumentOutput, type DocumentResult, EFFORT_DISCIPLINES, type EffortDiscipline, type EffortQueryStore, type EventRowIdentity, type EventStore, type ExecutionContext, type FamilyRunPayload, type FindOptions, type FindPredicate, type FindQueryResult, type FormulaEvaluation, type FormulaEvaluator, GIT_SHA, type IFieldCatalog, type LinkWidget, type MetricPredicate, type NoteContainer, type NoteQueryStore, type NoteRelationBundle, type OperandValue, type OutputUnitResolution, PLANNED_WIDGET_TYPES, type PageSourceEntry, PageSourceRegistry, type ParsedAggregateQuery, type ParsedDocument, type ParsedFindQuery, type ParsedFrontmatter, type ParsedPipelineQuery, type ParsedRowsQuery, type ParsedWqlRollupSuffix, type ParsedWqlSuffixes, type ParsedWqlWindowSuffix, type PipelineOptions, type PipelineResult, type PipelineSink, type PipelineSource, type PointwiseInputs, type QueryDocument, QueryDocumentRunner$1 as QueryDocumentRunner, type QueryDocumentRunnerHost, type QueryDocumentRunnerOptions, type QueryOptions, type QueryResult, QueryService, type QueryServiceStores, type QueryWidgetSuffix, type QueryWindow, type ResolvedRange, type RowsPipes, type RowsQueryResult, type RowsRun, SEMVER, SOURCE_ID_SHAPES, type Series, type SeriesPoint, QueryDocumentRunner as SharedQueryDocumentRunner, type SharedRunnerOptions, type SummaryFactIdentity, type SummaryFactSourceOutput, type TabularColumn, type TabularGroup, type TabularResult, type TagFilter, type TagValue, UNASSIGNED, type UnitBearingFact, type UnitFamily, VERSION, WQL_AGGREGATORS, WQL_CALC_TARGETS, WQL_CHART_HEADS, WQL_COMPARISON_OPS, WQL_CONTENT_FILTER_KEYS, WQL_CONTENT_ONLY_KEYS, WQL_DISPLAY_UNITS, WQL_EFFORT_FILTER_KEYS, WQL_FIND_TARGETS, WQL_FUNCTION_HEADS, WQL_GRAINS, WQL_INTENSITY_TIERS, WQL_KEYWORDS, WQL_METRIC_AGGREGATES, WQL_METRIC_FAMILIES, WQL_NOTE_DEFAULT_SOURCES, WQL_NOTE_HEAD_ALIASES, WQL_RESULT_PLANES, WQL_ROLLUP_PERIODS, WQL_SOURCES, WQL_SOURCE_HEADS, WQL_SOURCE_HEAD_SCOPES, WQL_SOURCE_VALUES, WQL_STANDARD_DATASETS, WQL_TAG_KEYS, WQL_TYPED_TAG_KEYS, WQL_TYPE_HEADS, WQL_VIRTUAL_DIMS, type WidgetOpResult, type WidgetSpan, type WidgetSpec, type WqlAggregator, type WqlCalcTarget, type WqlChartHead, type WqlComparisonOp, type WqlCompletionOptions, type WqlContentFilterKey, type WqlDisplayUnit, type WqlDomainOrder, type WqlDomainPredicate, type WqlDomainReadResult, type WqlFindTarget, type WqlFunctionHead, type WqlGrain, type WqlIntensityTier, type WqlKeyword, type WqlMetricAggregate, type WqlMetricFamily, type WqlResultPlane, type WqlRollupPeriod, type WqlSource, type WqlSourceHead, type WqlSourceValue, type WqlStandardDataset, type WqlTagKey, type WqlTypedTagKey, type WqlVirtualDim, allowedFilterTypesForTarget, appendSuffixes, appendWidget, buildDashboardDocument, buildDashboardScaffold, buildDrillDownQuery, captureContext, civilDateAdd, civilDateDiff, civilDateOf, civilDatesCoveredByRange, civilMonday, consumesRollupFacts, convertDisplay, createBuiltinFormulaEvaluator, dashboardSlug, defaultTokenValues, disciplineFactorFor, duplicateWidget, eventsToStoredLogs, extractDashboardTokens, extractFrontmatterTags, feedOfItem, findTargetAdvisories, getList, getScalar, getUnitFamily, hasLegacyIdentity, inRange, isAggregateQuery, isDashboardMeta, isDashboardWidgetType, isEffortDiscipline, isFindQuery, isPipelineQuery, isProposedMetric, migrateLegacyChunkId, migrateLegacyDashboardBodies, migrateLegacyRouteId, migrateLegacyRow, migrateLegacySourceId, migrateLegacySourcePath, moveWidget, normalizeSummaryFacts, normalizeWql, notebookOfItem, notebookOriginOfItem, notebookSlugOfSourceId, parseDashboardNote, parseDocument, parseFlatProperties, parseFrontmatter, parseFrontmatterBody, parseFrontmatterCategories, parseFrontmatterProps, parseQuery, parseQueryWidgetSuffix, parseWqlSuffixes, projectEventToFacts, referencedTokens, removeWidget, renderWidgetGroup, resizeWidget, resolveCanonicalMetricKey, resolveOutputUnit, resolveWidgetType, resolveWindowRange, rowsParseError, serialize, serializeDocument, serializeFrontmatter, setDashboardTokenValue, sourceMatches, sourceShape, splitAtWhere, stripFrontmatter, substituteTokens, substituteTokens$1 as substituteTokensRaw, supportsWqlFilterKey, systemTimeZone, toEventRows, toSummaryEventRows, unknownTokensMessage, unknownWidgetTypeMessage, updateWidget, widgetBodyLine, widgetFenceTag, wql, wqlCompletion, wqlCompletionSource, wqlFilterKeys, wqlGroupingDimensions, wqlHighlightStyle, wqlLanguage, parser as wqlParser, wql_parser_terms as wqlTerms, zonedNoon, zonedStartOfDay };
2323
+ export { type Aggregator, type AnyParsedQuery, BUILD_TIME, type BlockQueryStore, CONTENT_GROUPING_DIMENSIONS, type CatalogFieldSuggestion, type CatalogValueSuggestion, type ComparisonOp, DASHBOARD_GRID_MAX_COLS, DASHBOARD_WIDGET_TYPES, DEFAULT_DASHBOARD_TITLE, DISCIPLINE_FACTORS, type DashboardDocument, type DashboardMeta, type DashboardParsedSection, type DashboardSectionInput, type DashboardToken, type DashboardWidget, type DashboardWidgetType, type DocumentAssignment, type DocumentDefaults, type DocumentFormula, type DocumentOutput, type DocumentResult, EFFORT_DISCIPLINES, type EffortDiscipline, type EffortQueryStore, type EventRowIdentity, type EventStore, type ExecutionContext, type FamilyRunPayload, type FindOptions, type FindPredicate, type FindQueryResult, type FormulaEvaluation, type FormulaEvaluator, GIT_SHA, type IFieldCatalog, type LinkWidget, type MetricPredicate, type NoteContainer, type NoteQueryStore, type NoteRelationBundle, type OperandValue, type OutputUnitResolution, PLANNED_WIDGET_TYPES, type PageSourceEntry, PageSourceRegistry, type ParsedAggregateQuery, type ParsedDocument, type ParsedFindQuery, type ParsedFrontmatter, type ParsedPipelineQuery, type ParsedRowsQuery, type ParsedWqlRollupSuffix, type ParsedWqlSuffixes, type ParsedWqlWindowSuffix, type PipelineOptions, type PipelineResult, type PipelineSink, type PipelineSource, type PointwiseInputs, type QueryDocument, QueryDocumentRunner$1 as QueryDocumentRunner, type QueryDocumentRunnerHost, type QueryDocumentRunnerOptions, type QueryOptions, type QueryResult, QueryService, type QueryServiceStores, type QueryWidgetSuffix, type QueryWindow, type ResolvedRange, type RowsPipes, type RowsQueryResult, type RowsRun, SEMVER, SOURCE_ID_SHAPES, type Series, type SeriesPoint, QueryDocumentRunner as SharedQueryDocumentRunner, type SharedRunnerOptions, type SummaryFactIdentity, type SummaryFactSourceOutput, type TabularColumn, type TabularGroup, type TabularResult, type TagFilter, type TagValue, UNASSIGNED, type UnitBearingFact, type UnitFamily, VERSION, WQL_AGGREGATORS, WQL_CALC_TARGETS, WQL_CHART_HEADS, WQL_COMPARISON_OPS, WQL_CONTENT_FILTER_KEYS, WQL_CONTENT_ONLY_KEYS, WQL_DISPLAY_UNITS, WQL_EFFORT_FILTER_KEYS, WQL_FIND_TARGETS, WQL_FUNCTION_HEADS, WQL_GRAINS, WQL_INTENSITY_TIERS, WQL_KEYWORDS, WQL_METRIC_AGGREGATES, WQL_METRIC_FAMILIES, WQL_NOTE_DEFAULT_SOURCES, WQL_NOTE_HEAD_ALIASES, WQL_RESULT_PLANES, WQL_ROLLUP_PERIODS, WQL_SOURCES, WQL_SOURCE_HEADS, WQL_SOURCE_HEAD_SCOPES, WQL_SOURCE_VALUES, WQL_STANDARD_DATASETS, WQL_TAG_KEYS, WQL_TYPED_TAG_KEYS, WQL_TYPE_HEADS, WQL_VIRTUAL_DIMS, type WidgetOpResult, type WidgetSpan, type WidgetSpec, type WqlAggregator, type WqlCalcTarget, type WqlChartHead, type WqlComparisonOp, type WqlCompletionOptions, type WqlContentFilterKey, type WqlDisplayUnit, type WqlDomainOrder, type WqlDomainPredicate, type WqlDomainReadResult, type WqlFindTarget, type WqlFunctionHead, type WqlGrain, type WqlIntensityTier, type WqlKeyword, type WqlMetricAggregate, type WqlMetricFamily, type WqlResultPlane, type WqlRollupPeriod, type WqlSource, type WqlSourceHead, type WqlSourceValue, type WqlStandardDataset, type WqlTagKey, type WqlTypedTagKey, type WqlVirtualDim, allowedFilterTypesForTarget, appendSuffixes, appendWidget, buildDashboardDocument, buildDashboardScaffold, buildDrillDownQuery, captureContext, chunkIdOfItem, civilDateAdd, civilDateDiff, civilDateOf, civilDatesCoveredByRange, civilMonday, consumesRollupFacts, convertDisplay, createBuiltinFormulaEvaluator, dashboardSlug, defaultTokenValues, disciplineFactorFor, duplicateWidget, eventsToStoredLogs, extractDashboardTokens, extractFrontmatterTags, feedIdOfItem, feedOfItem, findTargetAdvisories, getList, getScalar, getUnitFamily, hasLegacyIdentity, inRange, isAggregateQuery, isDashboardMeta, isDashboardWidgetType, isEffortDiscipline, isFindQuery, isItemSubscribed, isPipelineQuery, isProposedMetric, migrateLegacyChunkId, migrateLegacyDashboardBodies, migrateLegacyRouteId, migrateLegacyRow, migrateLegacySourceId, migrateLegacySourcePath, moveWidget, normalizeSummaryFacts, normalizeWql, notebookOfItem, notebookOriginOfItem, notebookSlugOfSourceId, parseDashboardNote, parseDocument, parseFlatProperties, parseFrontmatter, parseFrontmatterBody, parseFrontmatterCategories, parseFrontmatterProps, parseQuery, parseQueryWidgetSuffix, parseWqlSuffixes, projectEventToFacts, referencedTokens, removeWidget, renderWidgetGroup, resizeWidget, resolveCanonicalMetricKey, resolveOutputUnit, resolveWidgetType, resolveWindowRange, rowsParseError, serialize, serializeDocument, serializeFrontmatter, setDashboardTokenValue, sourceMatches, sourceShape, splitAtWhere, stripFrontmatter, substituteTokens, substituteTokens$1 as substituteTokensRaw, supportsWqlFilterKey, systemTimeZone, toEventRows, toSummaryEventRows, unknownTokensMessage, unknownWidgetTypeMessage, updateWidget, widgetBodyLine, widgetFenceTag, wql, wqlCompletion, wqlCompletionSource, wqlFilterKeys, wqlGroupingDimensions, wqlHighlightStyle, wqlLanguage, parser as wqlParser, wql_parser_terms as wqlTerms, zonedNoon, zonedStartOfDay };
package/dist/index.d.ts CHANGED
@@ -44,7 +44,7 @@ type WqlTagKey = (typeof WQL_TAG_KEYS)[number];
44
44
  * `catalog:` is retired (ticket 08 — the notebook plane and the
45
45
  * `notebook:` filter replace it) and `has:` was removed from the
46
46
  * declared vocabulary: it had no executor and the composer withheld it. */
47
- declare const WQL_CONTENT_ONLY_KEYS: readonly ["type", "text", "source", "notebook", "contributes"];
47
+ declare const WQL_CONTENT_ONLY_KEYS: readonly ["type", "text", "source", "notebook", "contributes", "feed", "subscribed"];
48
48
  /** Filter keys the effort registry can resolve (runFindEffort) — anything
49
49
  * else on find:effort is ignored and reported as an advisory. */
50
50
  declare const WQL_EFFORT_FILTER_KEYS: readonly ["effort", "discipline", "intensity", "origin", "text"];
@@ -130,7 +130,7 @@ type WqlResultPlane = (typeof WQL_RESULT_PLANES)[number];
130
130
  * and `has:` are gone (ticket 08): `catalog:` → `notebook:`, `has:` had no
131
131
  * executor. `contributes:` is the tag plane's contribution filter — a
132
132
  * contribution is never a `tags:` label filter. */
133
- declare const WQL_CONTENT_FILTER_KEYS: readonly ["type", "text", "source", "notebook", "page", "contributes", "domain", "format", "equipment", "quality", "intent", "effort", "discipline", "intensity", "grade", "note", "page", "origin", "grain", "metric", "block", "result", "tags"];
133
+ declare const WQL_CONTENT_FILTER_KEYS: readonly ["type", "text", "source", "notebook", "page", "contributes", "feed", "subscribed", "domain", "format", "equipment", "quality", "intent", "effort", "discipline", "intensity", "grade", "note", "page", "origin", "grain", "metric", "block", "result", "tags"];
134
134
  type WqlContentFilterKey = (typeof WQL_CONTENT_FILTER_KEYS)[number];
135
135
  /**
136
136
  * Composer source planes (issue #838, decision #836): the single `source`
@@ -160,7 +160,7 @@ type WqlKeyword = (typeof WQL_KEYWORDS)[number];
160
160
  * results and the view groups them, ordered and multi-dim. The find tables
161
161
  * (segment/event) group inside the executor over selected columns instead.
162
162
  */
163
- declare const CONTENT_GROUPING_DIMENSIONS: readonly ["date", "day", "week", "month", "year", "discipline", "origin", "source", "notebook", "kind", "type", "tag"];
163
+ declare const CONTENT_GROUPING_DIMENSIONS: readonly ["date", "day", "week", "month", "year", "discipline", "origin", "source", "notebook", "kind", "type", "tag", "feed"];
164
164
  /** Guided clause types, including structural clauses honored by their consumers. */
165
165
  declare function allowedFilterTypesForTarget(target: string, family: 'find' | 'aggregate'): ReadonlySet<string>;
166
166
  /** Suggested filter keys. Fact-backed queries also accept custom dimension keys. */
@@ -1168,6 +1168,8 @@ interface QueryServiceStores {
1168
1168
  notes: Note[];
1169
1169
  } | undefined;
1170
1170
  };
1171
+ /** Optional notebook subscription checker for feed-owned notes/notebooks. */
1172
+ isNotebookSubscribed?: (feedId: string, chunkId: string) => boolean;
1171
1173
  }
1172
1174
 
1173
1175
  /**
@@ -1250,6 +1252,25 @@ declare function notebookOfItem(item: {
1250
1252
  * tier 1, so it is editable while its origin stays visible.
1251
1253
  */
1252
1254
  declare function notebookOriginOfItem(item: Parameters<typeof notebookOfItem>[0]): NotebookOrigin | undefined;
1255
+ declare function feedIdOfItem(item: {
1256
+ feedSourceId?: string;
1257
+ seedChunkId?: string;
1258
+ sourcePath?: string;
1259
+ notebookId?: string;
1260
+ tags?: readonly string[];
1261
+ }): string;
1262
+ declare function chunkIdOfItem(item: {
1263
+ seedChunkId?: string;
1264
+ sourcePath?: string;
1265
+ notebookId?: string;
1266
+ tags?: readonly string[];
1267
+ }): string | undefined;
1268
+ declare function isItemSubscribed(item: Parameters<typeof notebookOfItem>[0] & {
1269
+ feedSourceId?: string;
1270
+ seedChunkId?: string;
1271
+ seedOrigin?: string;
1272
+ origin?: string;
1273
+ }, isNotebookSubscribedFn?: (feedId: string, chunkId: string) => boolean): boolean;
1253
1274
  /**
1254
1275
  * Storage-identity shape per WQL source kind — THE one table of `sourceId`
1255
1276
  * prefixes and exact literals. The JS residual filter (`sourceMatches`) and
@@ -1387,6 +1408,7 @@ interface FindOptions {
1387
1408
  anchorNow?: number;
1388
1409
  /** Captured execution context (ticket 12). */
1389
1410
  context?: ExecutionContext;
1411
+ isNotebookSubscribed?: (feedId: string, chunkId: string) => boolean;
1390
1412
  }
1391
1413
  interface QueryResult {
1392
1414
  parsed: ParsedAggregateQuery;
@@ -1461,6 +1483,7 @@ declare class QueryService {
1461
1483
  private readonly pageStore?;
1462
1484
  private readonly relationStore?;
1463
1485
  private readonly datasetStore?;
1486
+ private readonly isNotebookSubscribed?;
1464
1487
  private blockEffortsStore;
1465
1488
  private tagsStore;
1466
1489
  private noteTagsStore;
@@ -2288,13 +2311,13 @@ declare function migrateLegacyDashboardBodies(raw: string): string;
2288
2311
  * Auto-generated build version metadata.
2289
2312
  * Do not edit directly; updated by scripts/stamp-version.ts
2290
2313
  */
2291
- declare const VERSION = "0.45.2167";
2292
- declare const GIT_SHA = "d9859fd";
2293
- declare const BUILD_TIME = "2026-10-26T20:26:47.975Z";
2314
+ declare const VERSION = "0.47.2169";
2315
+ declare const GIT_SHA = "388d659";
2316
+ declare const BUILD_TIME = "2026-10-26T23:06:14.030Z";
2294
2317
  declare const SEMVER: {
2295
- readonly version: "0.45.2167";
2296
- readonly gitSha: "d9859fd";
2297
- readonly buildTime: "2026-10-26T20:26:47.975Z";
2318
+ readonly version: "0.47.2169";
2319
+ readonly gitSha: "388d659";
2320
+ readonly buildTime: "2026-10-26T23:06:14.030Z";
2298
2321
  };
2299
2322
 
2300
- export { type Aggregator, type AnyParsedQuery, BUILD_TIME, type BlockQueryStore, CONTENT_GROUPING_DIMENSIONS, type CatalogFieldSuggestion, type CatalogValueSuggestion, type ComparisonOp, DASHBOARD_GRID_MAX_COLS, DASHBOARD_WIDGET_TYPES, DEFAULT_DASHBOARD_TITLE, DISCIPLINE_FACTORS, type DashboardDocument, type DashboardMeta, type DashboardParsedSection, type DashboardSectionInput, type DashboardToken, type DashboardWidget, type DashboardWidgetType, type DocumentAssignment, type DocumentDefaults, type DocumentFormula, type DocumentOutput, type DocumentResult, EFFORT_DISCIPLINES, type EffortDiscipline, type EffortQueryStore, type EventRowIdentity, type EventStore, type ExecutionContext, type FamilyRunPayload, type FindOptions, type FindPredicate, type FindQueryResult, type FormulaEvaluation, type FormulaEvaluator, GIT_SHA, type IFieldCatalog, type LinkWidget, type MetricPredicate, type NoteContainer, type NoteQueryStore, type NoteRelationBundle, type OperandValue, type OutputUnitResolution, PLANNED_WIDGET_TYPES, type PageSourceEntry, PageSourceRegistry, type ParsedAggregateQuery, type ParsedDocument, type ParsedFindQuery, type ParsedFrontmatter, type ParsedPipelineQuery, type ParsedRowsQuery, type ParsedWqlRollupSuffix, type ParsedWqlSuffixes, type ParsedWqlWindowSuffix, type PipelineOptions, type PipelineResult, type PipelineSink, type PipelineSource, type PointwiseInputs, type QueryDocument, QueryDocumentRunner$1 as QueryDocumentRunner, type QueryDocumentRunnerHost, type QueryDocumentRunnerOptions, type QueryOptions, type QueryResult, QueryService, type QueryServiceStores, type QueryWidgetSuffix, type QueryWindow, type ResolvedRange, type RowsPipes, type RowsQueryResult, type RowsRun, SEMVER, SOURCE_ID_SHAPES, type Series, type SeriesPoint, QueryDocumentRunner as SharedQueryDocumentRunner, type SharedRunnerOptions, type SummaryFactIdentity, type SummaryFactSourceOutput, type TabularColumn, type TabularGroup, type TabularResult, type TagFilter, type TagValue, UNASSIGNED, type UnitBearingFact, type UnitFamily, VERSION, WQL_AGGREGATORS, WQL_CALC_TARGETS, WQL_CHART_HEADS, WQL_COMPARISON_OPS, WQL_CONTENT_FILTER_KEYS, WQL_CONTENT_ONLY_KEYS, WQL_DISPLAY_UNITS, WQL_EFFORT_FILTER_KEYS, WQL_FIND_TARGETS, WQL_FUNCTION_HEADS, WQL_GRAINS, WQL_INTENSITY_TIERS, WQL_KEYWORDS, WQL_METRIC_AGGREGATES, WQL_METRIC_FAMILIES, WQL_NOTE_DEFAULT_SOURCES, WQL_NOTE_HEAD_ALIASES, WQL_RESULT_PLANES, WQL_ROLLUP_PERIODS, WQL_SOURCES, WQL_SOURCE_HEADS, WQL_SOURCE_HEAD_SCOPES, WQL_SOURCE_VALUES, WQL_STANDARD_DATASETS, WQL_TAG_KEYS, WQL_TYPED_TAG_KEYS, WQL_TYPE_HEADS, WQL_VIRTUAL_DIMS, type WidgetOpResult, type WidgetSpan, type WidgetSpec, type WqlAggregator, type WqlCalcTarget, type WqlChartHead, type WqlComparisonOp, type WqlCompletionOptions, type WqlContentFilterKey, type WqlDisplayUnit, type WqlDomainOrder, type WqlDomainPredicate, type WqlDomainReadResult, type WqlFindTarget, type WqlFunctionHead, type WqlGrain, type WqlIntensityTier, type WqlKeyword, type WqlMetricAggregate, type WqlMetricFamily, type WqlResultPlane, type WqlRollupPeriod, type WqlSource, type WqlSourceHead, type WqlSourceValue, type WqlStandardDataset, type WqlTagKey, type WqlTypedTagKey, type WqlVirtualDim, allowedFilterTypesForTarget, appendSuffixes, appendWidget, buildDashboardDocument, buildDashboardScaffold, buildDrillDownQuery, captureContext, civilDateAdd, civilDateDiff, civilDateOf, civilDatesCoveredByRange, civilMonday, consumesRollupFacts, convertDisplay, createBuiltinFormulaEvaluator, dashboardSlug, defaultTokenValues, disciplineFactorFor, duplicateWidget, eventsToStoredLogs, extractDashboardTokens, extractFrontmatterTags, feedOfItem, findTargetAdvisories, getList, getScalar, getUnitFamily, hasLegacyIdentity, inRange, isAggregateQuery, isDashboardMeta, isDashboardWidgetType, isEffortDiscipline, isFindQuery, isPipelineQuery, isProposedMetric, migrateLegacyChunkId, migrateLegacyDashboardBodies, migrateLegacyRouteId, migrateLegacyRow, migrateLegacySourceId, migrateLegacySourcePath, moveWidget, normalizeSummaryFacts, normalizeWql, notebookOfItem, notebookOriginOfItem, notebookSlugOfSourceId, parseDashboardNote, parseDocument, parseFlatProperties, parseFrontmatter, parseFrontmatterBody, parseFrontmatterCategories, parseFrontmatterProps, parseQuery, parseQueryWidgetSuffix, parseWqlSuffixes, projectEventToFacts, referencedTokens, removeWidget, renderWidgetGroup, resizeWidget, resolveCanonicalMetricKey, resolveOutputUnit, resolveWidgetType, resolveWindowRange, rowsParseError, serialize, serializeDocument, serializeFrontmatter, setDashboardTokenValue, sourceMatches, sourceShape, splitAtWhere, stripFrontmatter, substituteTokens, substituteTokens$1 as substituteTokensRaw, supportsWqlFilterKey, systemTimeZone, toEventRows, toSummaryEventRows, unknownTokensMessage, unknownWidgetTypeMessage, updateWidget, widgetBodyLine, widgetFenceTag, wql, wqlCompletion, wqlCompletionSource, wqlFilterKeys, wqlGroupingDimensions, wqlHighlightStyle, wqlLanguage, parser as wqlParser, wql_parser_terms as wqlTerms, zonedNoon, zonedStartOfDay };
2323
+ export { type Aggregator, type AnyParsedQuery, BUILD_TIME, type BlockQueryStore, CONTENT_GROUPING_DIMENSIONS, type CatalogFieldSuggestion, type CatalogValueSuggestion, type ComparisonOp, DASHBOARD_GRID_MAX_COLS, DASHBOARD_WIDGET_TYPES, DEFAULT_DASHBOARD_TITLE, DISCIPLINE_FACTORS, type DashboardDocument, type DashboardMeta, type DashboardParsedSection, type DashboardSectionInput, type DashboardToken, type DashboardWidget, type DashboardWidgetType, type DocumentAssignment, type DocumentDefaults, type DocumentFormula, type DocumentOutput, type DocumentResult, EFFORT_DISCIPLINES, type EffortDiscipline, type EffortQueryStore, type EventRowIdentity, type EventStore, type ExecutionContext, type FamilyRunPayload, type FindOptions, type FindPredicate, type FindQueryResult, type FormulaEvaluation, type FormulaEvaluator, GIT_SHA, type IFieldCatalog, type LinkWidget, type MetricPredicate, type NoteContainer, type NoteQueryStore, type NoteRelationBundle, type OperandValue, type OutputUnitResolution, PLANNED_WIDGET_TYPES, type PageSourceEntry, PageSourceRegistry, type ParsedAggregateQuery, type ParsedDocument, type ParsedFindQuery, type ParsedFrontmatter, type ParsedPipelineQuery, type ParsedRowsQuery, type ParsedWqlRollupSuffix, type ParsedWqlSuffixes, type ParsedWqlWindowSuffix, type PipelineOptions, type PipelineResult, type PipelineSink, type PipelineSource, type PointwiseInputs, type QueryDocument, QueryDocumentRunner$1 as QueryDocumentRunner, type QueryDocumentRunnerHost, type QueryDocumentRunnerOptions, type QueryOptions, type QueryResult, QueryService, type QueryServiceStores, type QueryWidgetSuffix, type QueryWindow, type ResolvedRange, type RowsPipes, type RowsQueryResult, type RowsRun, SEMVER, SOURCE_ID_SHAPES, type Series, type SeriesPoint, QueryDocumentRunner as SharedQueryDocumentRunner, type SharedRunnerOptions, type SummaryFactIdentity, type SummaryFactSourceOutput, type TabularColumn, type TabularGroup, type TabularResult, type TagFilter, type TagValue, UNASSIGNED, type UnitBearingFact, type UnitFamily, VERSION, WQL_AGGREGATORS, WQL_CALC_TARGETS, WQL_CHART_HEADS, WQL_COMPARISON_OPS, WQL_CONTENT_FILTER_KEYS, WQL_CONTENT_ONLY_KEYS, WQL_DISPLAY_UNITS, WQL_EFFORT_FILTER_KEYS, WQL_FIND_TARGETS, WQL_FUNCTION_HEADS, WQL_GRAINS, WQL_INTENSITY_TIERS, WQL_KEYWORDS, WQL_METRIC_AGGREGATES, WQL_METRIC_FAMILIES, WQL_NOTE_DEFAULT_SOURCES, WQL_NOTE_HEAD_ALIASES, WQL_RESULT_PLANES, WQL_ROLLUP_PERIODS, WQL_SOURCES, WQL_SOURCE_HEADS, WQL_SOURCE_HEAD_SCOPES, WQL_SOURCE_VALUES, WQL_STANDARD_DATASETS, WQL_TAG_KEYS, WQL_TYPED_TAG_KEYS, WQL_TYPE_HEADS, WQL_VIRTUAL_DIMS, type WidgetOpResult, type WidgetSpan, type WidgetSpec, type WqlAggregator, type WqlCalcTarget, type WqlChartHead, type WqlComparisonOp, type WqlCompletionOptions, type WqlContentFilterKey, type WqlDisplayUnit, type WqlDomainOrder, type WqlDomainPredicate, type WqlDomainReadResult, type WqlFindTarget, type WqlFunctionHead, type WqlGrain, type WqlIntensityTier, type WqlKeyword, type WqlMetricAggregate, type WqlMetricFamily, type WqlResultPlane, type WqlRollupPeriod, type WqlSource, type WqlSourceHead, type WqlSourceValue, type WqlStandardDataset, type WqlTagKey, type WqlTypedTagKey, type WqlVirtualDim, allowedFilterTypesForTarget, appendSuffixes, appendWidget, buildDashboardDocument, buildDashboardScaffold, buildDrillDownQuery, captureContext, chunkIdOfItem, civilDateAdd, civilDateDiff, civilDateOf, civilDatesCoveredByRange, civilMonday, consumesRollupFacts, convertDisplay, createBuiltinFormulaEvaluator, dashboardSlug, defaultTokenValues, disciplineFactorFor, duplicateWidget, eventsToStoredLogs, extractDashboardTokens, extractFrontmatterTags, feedIdOfItem, feedOfItem, findTargetAdvisories, getList, getScalar, getUnitFamily, hasLegacyIdentity, inRange, isAggregateQuery, isDashboardMeta, isDashboardWidgetType, isEffortDiscipline, isFindQuery, isItemSubscribed, isPipelineQuery, isProposedMetric, migrateLegacyChunkId, migrateLegacyDashboardBodies, migrateLegacyRouteId, migrateLegacyRow, migrateLegacySourceId, migrateLegacySourcePath, moveWidget, normalizeSummaryFacts, normalizeWql, notebookOfItem, notebookOriginOfItem, notebookSlugOfSourceId, parseDashboardNote, parseDocument, parseFlatProperties, parseFrontmatter, parseFrontmatterBody, parseFrontmatterCategories, parseFrontmatterProps, parseQuery, parseQueryWidgetSuffix, parseWqlSuffixes, projectEventToFacts, referencedTokens, removeWidget, renderWidgetGroup, resizeWidget, resolveCanonicalMetricKey, resolveOutputUnit, resolveWidgetType, resolveWindowRange, rowsParseError, serialize, serializeDocument, serializeFrontmatter, setDashboardTokenValue, sourceMatches, sourceShape, splitAtWhere, stripFrontmatter, substituteTokens, substituteTokens$1 as substituteTokensRaw, supportsWqlFilterKey, systemTimeZone, toEventRows, toSummaryEventRows, unknownTokensMessage, unknownWidgetTypeMessage, updateWidget, widgetBodyLine, widgetFenceTag, wql, wqlCompletion, wqlCompletionSource, wqlFilterKeys, wqlGroupingDimensions, wqlHighlightStyle, wqlLanguage, parser as wqlParser, wql_parser_terms as wqlTerms, zonedNoon, zonedStartOfDay };
package/dist/index.mjs CHANGED
@@ -30,7 +30,7 @@ var WQL_TAG_KEYS = [
30
30
  "result",
31
31
  "tags"
32
32
  ];
33
- var WQL_CONTENT_ONLY_KEYS = ["type", "text", "source", "notebook", "contributes"];
33
+ var WQL_CONTENT_ONLY_KEYS = ["type", "text", "source", "notebook", "contributes", "feed", "subscribed"];
34
34
  var WQL_EFFORT_FILTER_KEYS = ["effort", "discipline", "intensity", "origin", "text"];
35
35
  var WQL_VIRTUAL_DIMS = ["day", "week", "session", "round"];
36
36
  var WQL_CALC_TARGETS = [
@@ -91,7 +91,7 @@ var WQL_FUNCTION_HEADS = WQL_AGGREGATORS;
91
91
  var WQL_CHART_HEADS = ["timeseries", "bar", "table", "donut", "toplist", "value"];
92
92
  var WQL_STANDARD_DATASETS = ["@session", "@today"];
93
93
  var WQL_RESULT_PLANES = KNOWN_OUTPUT_TYPES;
94
- var WQL_CONTENT_FILTER_KEYS = ["type", "text", "source", "notebook", "page", "contributes", ...WQL_TAG_KEYS];
94
+ var WQL_CONTENT_FILTER_KEYS = ["type", "text", "source", "notebook", "page", "contributes", "feed", "subscribed", ...WQL_TAG_KEYS];
95
95
  var WQL_SOURCES = WQL_FIND_TARGETS;
96
96
  var WQL_ROLLUP_PERIODS = ["2w", "4w"];
97
97
  var WQL_DISPLAY_UNITS = ["kg", "lb"];
@@ -113,7 +113,7 @@ var WQL_KEYWORDS = [
113
113
  ];
114
114
 
115
115
  // src/capabilities.ts
116
- var CONTENT_GROUPING_DIMENSIONS = ["date", "day", "week", "month", "year", "discipline", "origin", "source", "notebook", "kind", "type", "tag"];
116
+ var CONTENT_GROUPING_DIMENSIONS = ["date", "day", "week", "month", "year", "discipline", "origin", "source", "notebook", "kind", "type", "tag", "feed"];
117
117
  var STRUCTURAL_TYPES = { time: true, groupby: true, rollup: true, unit: true, where: true, agg: true };
118
118
  var FACT_KEYS = WQL_TAG_KEYS.filter((key) => key !== "metric");
119
119
  var TABLE_KEYS = WQL_TAG_KEYS.filter((key) => key !== "tags");
@@ -131,9 +131,9 @@ var TARGET_TYPES = {
131
131
  // The notebook plane IS the note plane (its executor delegates), so both
132
132
  // advertise the same member-criteria keys — container criteria (tags:,
133
133
  // effort:, typed tags, text:) narrow notebook results, never ignored.
134
- notebook: /* @__PURE__ */ new Set(["text", "notebook", "tag", "effort", ...WQL_TYPED_TAG_KEYS, "type", "page", "source", "note", "time", "groupby", "where"]),
135
- note: /* @__PURE__ */ new Set(["text", "notebook", "tag", "effort", ...WQL_TYPED_TAG_KEYS, "type", "page", "source", "note", "time", "groupby", "where"]),
136
- block: /* @__PURE__ */ new Set(["text", "notebook", "tag", "effort", "type", "source", "note", "time", "groupby", "where"]),
134
+ notebook: /* @__PURE__ */ new Set(["text", "notebook", "tag", "effort", ...WQL_TYPED_TAG_KEYS, "type", "page", "source", "note", "time", "groupby", "where", "feed", "subscribed"]),
135
+ note: /* @__PURE__ */ new Set(["text", "notebook", "tag", "effort", ...WQL_TYPED_TAG_KEYS, "type", "page", "source", "note", "time", "groupby", "where", "feed", "subscribed"]),
136
+ block: /* @__PURE__ */ new Set(["text", "notebook", "tag", "effort", "type", "source", "note", "time", "groupby", "where", "feed", "subscribed"]),
137
137
  effort: /* @__PURE__ */ new Set([...WQL_EFFORT_FILTER_KEYS, "groupby"]),
138
138
  session: /* @__PURE__ */ new Set(["result", "block", "note", "plane", "time", "groupby"]),
139
139
  segment: /* @__PURE__ */ new Set([...TABLE_KEYS, "time", "groupby", "unit"]),
@@ -178,9 +178,9 @@ function supportsWqlFilterKey(target, family, rawKey) {
178
178
  }
179
179
  var parser = LRParser.deserialize({
180
180
  version: 14,
181
- states: "+^OVQPOOOOQO'#Cb'#CbObQPO'#C`OgQPO'#C`OlQPO'#ClOqQQO'#C_OOQO'#C_'#C_O!SQQO'#CnQOQPOOOOQO,58z,58zO!bQPO,58zOOQO,59W,59WO!gQPO'#CdOOQO,58y,58yOVQPO,58xO!rQPO'#CoO!wQPO'#CrOOQO,59Y,59YO!|QPO,59YO#UQQO'#CcOOQO1G.f1G.fOOQO'#Cg'#CgO#jQPO'#CeO#oQPO'#CeOOQO,59O,59OO#tQPO,59OO#|QPO'#C_O$XQPO1G.dO$aQPO,59ZO$iQQO,59^OOQO1G.t1G.tO$nQPO'#CuO$sQQO,58}O%XQPO,59PO%aQPO,59PO%fQPO'#CxO%nQPO1G.jOOQO1G.j1G.jOVQPO'#CyO%vQPO7+$OOOQO'#Cq'#CqOOQO1G.u1G.uO&OQPO1G.uO&WQPO1G.xOOQO,59a,59aOOQO-E6s-E6sO&]QPO'#CiO&qQPO'#CiO'PQPO'#ChOOQO1G.k1G.kO%XQPO1G.kOOQO,59d,59dOOQO-E6v-E6vOOQO7+$U7+$UO'[QPO'#CcOOQO,59e,59eOOQO-E6w-E6wO'jQPO'#CzO'oQPO7+$aOOQO7+$a7+$aO'wQPO7+$dO'|QPO'#CvO(RQPO,59TOOQO,59T,59TO%XQPO'#CwO(gQPO,59SOOQO7+$V7+$VO(rQPO,58}OOQO,59f,59fOOQO-E6x-E6xOOQO<<G{<<G{OOQO<<HO<<HOOOQO,59b,59bOOQO-E6t-E6tOOQO1G.o1G.oOOQO,59c,59cOOQO-E6u-E6uO)QQPO,58zO)VQPO'#C`",
182
- stateData: ")[~OqOS~OTPOaSOrQO~OTXO~OrYO~OTZO~Ot[OdRXgRXoRXuRX~Od_Og`Ou^OobX~OTcO~OTeOYgOwhO~OtlO~OxmO~Og`Ooba~OsoOdVXgVXoVXtVXuVX~OrqO~OTeO~OvsOwuO~Ot[OoRXuRX~OuvOoQi~OTxOwyO~Oh{O~OT|O~OsoOdVagVaoVatVauVa~OT!OO_!PO~Or!SO~OTeOYgO~OvsOw!VO~OuvOoQq~Ov!ZOw!]O~OT!^O~O^!aOr!_Os!_Ou]Xv]Xw]X~O^!aOu]Xv]Xw]X~Ou!bOv[Xw[X~OsoOoVXtVXuVX~OTxO~Ov!ZOw!hO~Oy!iO~OT!jO~O^!lOr!_Os!_Ou]av]aw]a~Ou!bOv[aw[a~OsoOoVatVauVa~OT!WO~Or!oO~O",
183
- goto: "$^oPPps|P!T![!`!dP!j!q!wPP#OPp#TP#W#^PP#d#n#t#z$Q$WRWOQVOQk^R!XvQTOTj^vQROT!p^vTdY!oT]TjQi[R!TsSf[sRrgQ!RqR!d!SS!Qq!SR!m!bVUO^vRbVQzlR!f!ZQaVRnbQpcS}p!eR!e!WQ!`!OR!k!`Q!c!QR!n!cQtiR!UtQwkR!YwQ![zR!g![",
181
+ states: "+dOVQPOOOOQO'#Cb'#CbObQPO'#C`OgQPO'#C`OlQPO'#ClOqQQO'#C_OOQO'#C_'#C_O!SQQO'#CnQOQPOOOOQO,58z,58zO!bQPO,58zOOQO,59W,59WO!gQPO'#CdOOQO,58y,58yOVQPO,58xO!rQPO'#CoO!wQPO'#CrOOQO,59Y,59YO!|QPO,59YO#UQQO'#CcOOQO1G.f1G.fOOQO'#Cg'#CgO#jQPO'#CeO#oQPO'#CeOOQO,59O,59OO#tQPO,59OO#|QPO'#C_O$XQPO1G.dO$aQPO,59ZO$iQQO,59^OOQO1G.t1G.tO$nQPO'#CuO$sQQO,58}O%XQPO,59PO%dQPO,59PO%iQPO'#CxO%qQPO1G.jOOQO1G.j1G.jOVQPO'#CyO%yQPO7+$OOOQO'#Cq'#CqOOQO1G.u1G.uO&RQPO1G.uO&ZQPO1G.xOOQO,59a,59aOOQO-E6s-E6sOOQO'#Ci'#CiO&`QPO'#CiO&tQPO'#CiO'SQPO'#ChOOQO1G.k1G.kO%XQPO1G.kOOQO,59d,59dOOQO-E6v-E6vOOQO7+$U7+$UO'_QPO'#CcOOQO,59e,59eOOQO-E6w-E6wO'mQPO'#CzO'rQPO7+$aOOQO7+$a7+$aO'zQPO7+$dO(PQPO'#CvO(UQPO,59TOOQO,59T,59TO%XQPO'#CwO(jQPO,59SOOQO7+$V7+$VO(uQPO,58}OOQO,59f,59fOOQO-E6x-E6xOOQO<<G{<<G{OOQO<<HO<<HOOOQO,59b,59bOOQO-E6t-E6tOOQO1G.o1G.oOOQO,59c,59cOOQO-E6u-E6uO)TQPO,58zO)YQPO'#C`",
182
+ stateData: ")_~OqOS~OTPOaSOrQO~OTXO~OrYO~OTZO~Ot[OdRXgRXoRXuRX~Od_Og`Ou^OobX~OTcO~OTeOYgOwhO~OtlO~OxmO~Og`Ooba~OsoOdVXgVXoVXtVXuVX~OrqO~OTeO~OvsOwuO~Ot[OoRXuRX~OuvOoQi~OTxOwyO~Oh{O~OT|O~OsoOdVagVaoVatVauVa~OT!PO^!OO_!QO~Or!TO~OTeOYgO~OvsOw!WO~OuvOoQq~Ov![Ow!^O~OT!_O~O^!bOr!`Os!`Ou]Xv]Xw]X~O^!bOu]Xv]Xw]X~Ou!cOv[Xw[X~OsoOoVXtVXuVX~OTxO~Ov![Ow!iO~Oy!jO~OT!kO~O^!mOr!`Os!`Ou]av]aw]a~Ou!cOv[aw[a~OsoOoVatVauVa~OT!XO~Or!pO~O",
183
+ goto: "$^oPPps|P!T![!`!dP!j!q!wPP#OPp#TP#W#^PP#d#n#t#z$Q$WRWOQVOQk^R!YvQTOTj^vQROT!q^vTdY!pT]TjQi[R!UsSf[sRrgQ!SqR!e!TS!Rq!TR!n!cVUO^vRbVQzlR!g![QaVRnbQpcS}p!fR!f!XQ!a!PR!l!aQ!d!RR!o!dQtiR!VtQwkR!ZwQ!]zR!h!]",
184
184
  nodeNames: "\u26A0 Query Pipeline Stage Head Word Aggregator Metric Filters Filter Negate TagKey TagValue Value Star Quoted DatasetReference At Single GroupBy By Dimension Rollup RollupDot Int",
185
185
  maxTerm: 41,
186
186
  skippedNodes: [0],
@@ -670,7 +670,7 @@ function validateSourceFilter(filters) {
670
670
  return `source:notebook is retired \u2014 :notebook{} is the notebook plane (every notebook); narrow it with the notebook: filter, e.g. :notebook{notebook:journal}.`;
671
671
  }
672
672
  if (val === "feed" || val === "feeds" || val.startsWith("feed:")) {
673
- return `source:${val} is retired \u2014 the feed corpus is the notebook plane; use source:notebooks or notebook:<slug>.`;
673
+ return `source:${val} is retired \u2014 the feed corpus is the notebook plane; use feed:<feedId> or source:notebooks.`;
674
674
  }
675
675
  if (val === "collection" || val === "collections" || val.startsWith("collection:")) {
676
676
  return `source:${val} is retired \u2014 collections are notebooks; use source:notebooks or notebook:<slug>.`;
@@ -683,6 +683,28 @@ function validateSourceFilter(filters) {
683
683
  }
684
684
  return void 0;
685
685
  }
686
+ function validateSubscribedFilter(filters) {
687
+ for (const f of filters) {
688
+ if (f.key !== "subscribed") continue;
689
+ for (const v of f.values) {
690
+ if (v.value !== "true" && v.value !== "false") {
691
+ return `Invalid subscribed: value '${v.value}' \u2014 expected true or false`;
692
+ }
693
+ }
694
+ }
695
+ return void 0;
696
+ }
697
+ function validateFeedFilter(filters) {
698
+ for (const f of filters) {
699
+ if (f.key !== "feed") continue;
700
+ for (const v of f.values) {
701
+ if (!v.value && !v.wildcard) {
702
+ return `Invalid feed: value \u2014 expected a non-empty feed identifier or wildcard`;
703
+ }
704
+ }
705
+ }
706
+ return void 0;
707
+ }
686
708
  function extractPipes(raw) {
687
709
  let pipeIndex = -1;
688
710
  let depth = 0;
@@ -754,7 +776,7 @@ function extractFilters(query, text) {
754
776
  let value = quoted ? raw.slice(1, -1) : raw;
755
777
  const wildcard = quoted ? false : value.endsWith("*");
756
778
  if (wildcard) value = value.slice(0, -1);
757
- if (!value) continue;
779
+ if (!value && !wildcard) continue;
758
780
  values.push({ value, wildcard });
759
781
  }
760
782
  if (values.length === 0) continue;
@@ -999,6 +1021,16 @@ function parseFindQuery(raw, opts) {
999
1021
  result.error = sourceError;
1000
1022
  return result;
1001
1023
  }
1024
+ const subscribedError = validateSubscribedFilter(result.filters);
1025
+ if (subscribedError) {
1026
+ result.error = subscribedError;
1027
+ return result;
1028
+ }
1029
+ const feedError = validateFeedFilter(result.filters);
1030
+ if (feedError) {
1031
+ result.error = feedError;
1032
+ return result;
1033
+ }
1002
1034
  const findGrainError = retiredGrainRollup(result.filters);
1003
1035
  if (findGrainError) {
1004
1036
  result.error = findGrainError;
@@ -2974,6 +3006,29 @@ function notebookOriginOfItem(item) {
2974
3006
  if (notebook === "notebook/journal" || notebook === "notebook/playground") return "default";
2975
3007
  return "feed";
2976
3008
  }
3009
+ function feedIdOfItem(item) {
3010
+ const origin = notebookOriginOfItem(item);
3011
+ if (origin === "user") return "local";
3012
+ if (item.feedSourceId) return item.feedSourceId;
3013
+ if (origin === "default") return "local";
3014
+ return "core";
3015
+ }
3016
+ function chunkIdOfItem(item) {
3017
+ if (item.seedChunkId) return item.seedChunkId;
3018
+ const nb = notebookOfItem(item);
3019
+ if (!nb) return void 0;
3020
+ const slug = nb.replace(/^notebook\//, "");
3021
+ return `notebook.${slug}`;
3022
+ }
3023
+ function isItemSubscribed(item, isNotebookSubscribedFn) {
3024
+ const origin = item.origin ?? notebookOriginOfItem(item);
3025
+ if (origin === "user" || origin === "default") return true;
3026
+ if (!isNotebookSubscribedFn) return true;
3027
+ const feedId = feedIdOfItem(item);
3028
+ const chunkId = chunkIdOfItem(item);
3029
+ if (!chunkId) return true;
3030
+ return isNotebookSubscribedFn(feedId, chunkId);
3031
+ }
2977
3032
  function isJournalRow(item) {
2978
3033
  const sourceId = item.sourceId;
2979
3034
  if (item.type === "playground" || item.id?.startsWith("playground/") || item.noteId?.startsWith("playground/")) return false;
@@ -3386,6 +3441,7 @@ var QueryService = class {
3386
3441
  pageStore;
3387
3442
  relationStore;
3388
3443
  datasetStore;
3444
+ isNotebookSubscribed;
3389
3445
  // Optional storage seam properties for block_efforts and typed tag resolution.
3390
3446
  // Injected by the app adapter (`services/queryService.ts`); tests can supply fakes.
3391
3447
  blockEffortsStore = {
@@ -3410,6 +3466,7 @@ var QueryService = class {
3410
3466
  if (stores.blockEffortsStore) this.blockEffortsStore = stores.blockEffortsStore;
3411
3467
  if (stores.tagsStore) this.tagsStore = stores.tagsStore;
3412
3468
  if (stores.noteTagsStore) this.noteTagsStore = stores.noteTagsStore;
3469
+ if (stores.isNotebookSubscribed) this.isNotebookSubscribed = stores.isNotebookSubscribed;
3413
3470
  } else {
3414
3471
  this.store = storesOrEventStore ?? defaultEventStore;
3415
3472
  this.noteStore = noteStore ?? defaultNoteStore;
@@ -3813,6 +3870,38 @@ var QueryService = class {
3813
3870
  }
3814
3871
  }
3815
3872
  notes = applyNotebookFilter(notes, parsed.filters);
3873
+ const isSubscribedFn = options2.isNotebookSubscribed ?? this.isNotebookSubscribed ?? (() => true);
3874
+ for (const filter of parsed.filters) {
3875
+ if (filter.key === "feed") {
3876
+ const wanted = new Set(filter.values.map((v) => v.value));
3877
+ const hasWildcard = filter.values.some((v) => v.wildcard);
3878
+ notes = notes.filter((n) => {
3879
+ const fid = feedIdOfItem(n);
3880
+ const hit = hasWildcard ? fid !== "local" : wanted.has(fid);
3881
+ return filter.negate ? !hit : hit;
3882
+ });
3883
+ }
3884
+ }
3885
+ const subscribedFilter = parsed.filters.find((f) => f.key === "subscribed");
3886
+ if (subscribedFilter) {
3887
+ const wantedValues = new Set(subscribedFilter.values.map((v) => v.value));
3888
+ const wantsTrue = wantedValues.has("true");
3889
+ const wantsFalse = wantedValues.has("false");
3890
+ notes = notes.filter((n) => {
3891
+ const isSub = isItemSubscribed(n, isSubscribedFn);
3892
+ let match = false;
3893
+ if (wantsTrue && wantsFalse) {
3894
+ match = true;
3895
+ } else if (wantsTrue) {
3896
+ match = isSub;
3897
+ } else if (wantsFalse) {
3898
+ match = !isSub;
3899
+ }
3900
+ return subscribedFilter.negate ? !match : match;
3901
+ });
3902
+ } else if (parsed.target === "notebook" || parsed.raw.startsWith(":notebook")) {
3903
+ notes = notes.filter((n) => isItemSubscribed(n, isSubscribedFn));
3904
+ }
3816
3905
  for (const filter of parsed.filters) {
3817
3906
  if (filter.key === "note") {
3818
3907
  const wanted = new Set(filter.values.map((v) => v.value));
@@ -3951,6 +4040,36 @@ var QueryService = class {
3951
4040
  }
3952
4041
  }
3953
4042
  blocks = applyNotebookFilter(blocks, parsed.filters);
4043
+ const isSubscribedFn = options2.isNotebookSubscribed ?? this.isNotebookSubscribed ?? (() => true);
4044
+ for (const filter of parsed.filters) {
4045
+ if (filter.key === "feed") {
4046
+ const wanted = new Set(filter.values.map((v) => v.value));
4047
+ const hasWildcard = filter.values.some((v) => v.wildcard);
4048
+ blocks = blocks.filter((b) => {
4049
+ const fid = feedIdOfItem(b);
4050
+ const hit = hasWildcard ? fid !== "local" : wanted.has(fid);
4051
+ return filter.negate ? !hit : hit;
4052
+ });
4053
+ }
4054
+ }
4055
+ const subscribedFilter = parsed.filters.find((f) => f.key === "subscribed");
4056
+ if (subscribedFilter) {
4057
+ const wantedValues = new Set(subscribedFilter.values.map((v) => v.value));
4058
+ const wantsTrue = wantedValues.has("true");
4059
+ const wantsFalse = wantedValues.has("false");
4060
+ blocks = blocks.filter((b) => {
4061
+ const isSub = isItemSubscribed(b, isSubscribedFn);
4062
+ let match = false;
4063
+ if (wantsTrue && wantsFalse) {
4064
+ match = true;
4065
+ } else if (wantsTrue) {
4066
+ match = isSub;
4067
+ } else if (wantsFalse) {
4068
+ match = !isSub;
4069
+ }
4070
+ return subscribedFilter.negate ? !match : match;
4071
+ });
4072
+ }
3954
4073
  for (const filter of parsed.filters) {
3955
4074
  if (isTagLabelKey(filter.key) && !filter.negate) {
3956
4075
  const matchingNoteIds = /* @__PURE__ */ new Set();
@@ -5052,7 +5171,39 @@ function parseMetaLines(lines) {
5052
5171
  items.push(itemMatch[1].trim());
5053
5172
  i++;
5054
5173
  }
5055
- meta[key] = items.length > 0 ? items : "";
5174
+ if (items.length > 0) {
5175
+ meta[key] = items;
5176
+ } else if (key === "metrics" || key === "summaries") {
5177
+ while (i + 1 < lines.length) {
5178
+ const childLine = lines[i + 1];
5179
+ if (/^\s*(?:#.*)?$/.test(childLine)) {
5180
+ i++;
5181
+ continue;
5182
+ }
5183
+ const childMatch = childLine.match(/^\s{2,}([A-Za-z][\w.-]*)\s*:(.*)$/);
5184
+ if (!childMatch) break;
5185
+ i++;
5186
+ const childKey = `${key}.${childMatch[1]}`;
5187
+ const childRaw = childMatch[2].trim();
5188
+ if (childRaw === "") {
5189
+ const childItems = [];
5190
+ while (i + 1 < lines.length) {
5191
+ const listMatch = lines[i + 1].match(/^\s{4,}-\s+(.+)$/);
5192
+ if (!listMatch) break;
5193
+ childItems.push(listMatch[1].trim());
5194
+ i++;
5195
+ }
5196
+ meta[childKey] = childItems.length > 0 ? childItems : "";
5197
+ } else {
5198
+ const wasQuoted = /^(['"])(.*)\1$/.test(childRaw);
5199
+ const value = unquote(childRaw);
5200
+ const num = Number(value);
5201
+ meta[childKey] = !wasQuoted && value !== "" && !isNaN(num) ? num : value;
5202
+ }
5203
+ }
5204
+ } else {
5205
+ meta[key] = "";
5206
+ }
5056
5207
  } else {
5057
5208
  const wasQuoted = /^(['"])(.*)\1$/.test(rawVal);
5058
5209
  const value = unquote(rawVal);
@@ -5477,15 +5628,15 @@ ${query}
5477
5628
  }
5478
5629
 
5479
5630
  // src/version.ts
5480
- var VERSION = "0.45.2167";
5481
- var GIT_SHA = "d9859fd";
5482
- var BUILD_TIME = "2026-10-26T20:26:47.975Z";
5631
+ var VERSION = "0.47.2169";
5632
+ var GIT_SHA = "388d659";
5633
+ var BUILD_TIME = "2026-10-26T23:06:14.030Z";
5483
5634
  var SEMVER = {
5484
- version: "0.45.2167",
5485
- gitSha: "d9859fd",
5486
- buildTime: "2026-10-26T20:26:47.975Z"
5635
+ version: "0.47.2169",
5636
+ gitSha: "388d659",
5637
+ buildTime: "2026-10-26T23:06:14.030Z"
5487
5638
  };
5488
5639
 
5489
- export { BUILD_TIME, CONTENT_GROUPING_DIMENSIONS, DASHBOARD_GRID_MAX_COLS, DASHBOARD_WIDGET_TYPES, DEFAULT_DASHBOARD_TITLE, DISCIPLINE_FACTORS, EFFORT_DISCIPLINES, GIT_SHA, PLANNED_WIDGET_TYPES, PageSourceRegistry, QueryDocumentRunner, QueryService, SEMVER, SOURCE_ID_SHAPES, QueryDocumentRunner2 as SharedQueryDocumentRunner, UNASSIGNED, VERSION, WQL_AGGREGATORS, WQL_CALC_TARGETS, WQL_CHART_HEADS, WQL_COMPARISON_OPS, WQL_CONTENT_FILTER_KEYS, WQL_CONTENT_ONLY_KEYS, WQL_DISPLAY_UNITS, WQL_EFFORT_FILTER_KEYS, WQL_FIND_TARGETS, WQL_FUNCTION_HEADS, WQL_GRAINS, WQL_INTENSITY_TIERS, WQL_KEYWORDS, WQL_METRIC_AGGREGATES, WQL_METRIC_FAMILIES, WQL_NOTE_DEFAULT_SOURCES, WQL_NOTE_HEAD_ALIASES, WQL_RESULT_PLANES, WQL_ROLLUP_PERIODS, WQL_SOURCES, WQL_SOURCE_HEADS, WQL_SOURCE_HEAD_SCOPES, WQL_SOURCE_VALUES, WQL_STANDARD_DATASETS, WQL_TAG_KEYS, WQL_TYPED_TAG_KEYS, WQL_TYPE_HEADS, WQL_VIRTUAL_DIMS, allowedFilterTypesForTarget, appendSuffixes, appendWidget, buildDashboardDocument, buildDashboardScaffold, buildDrillDownQuery, captureContext, civilDateAdd, civilDateDiff, civilDateOf, civilDatesCoveredByRange, civilMonday, consumesRollupFacts, convertDisplay, createBuiltinFormulaEvaluator, dashboardSlug, defaultTokenValues, disciplineFactorFor, duplicateWidget, eventsToStoredLogs, extractDashboardTokens, extractFrontmatterTags, feedOfItem, findTargetAdvisories, getList, getScalar, getUnitFamily, hasLegacyIdentity, inRange, isAggregateQuery, isDashboardMeta, isDashboardWidgetType, isEffortDiscipline, isFindQuery, isPipelineQuery, isProposedMetric, migrateLegacyChunkId, migrateLegacyDashboardBodies, migrateLegacyRouteId, migrateLegacyRow, migrateLegacySourceId, migrateLegacySourcePath, moveWidget, normalizeSummaryFacts, normalizeWql, notebookOfItem, notebookOriginOfItem, notebookSlugOfSourceId, parseDashboardNote, parseDocument, parseFlatProperties, parseFrontmatter, parseFrontmatterBody, parseFrontmatterCategories, parseFrontmatterProps, parseQuery, parseQueryWidgetSuffix, parseWqlSuffixes, projectEventToFacts, referencedTokens, removeWidget, renderWidgetGroup, resizeWidget, resolveCanonicalMetricKey, resolveOutputUnit, resolveWidgetType, resolveWindowRange, rowsParseError, serialize, serializeDocument, serializeFrontmatter, setDashboardTokenValue, sourceMatches, sourceShape, splitAtWhere, stripFrontmatter, substituteTokens2 as substituteTokens, substituteTokens as substituteTokensRaw, supportsWqlFilterKey, systemTimeZone, toEventRows, toSummaryEventRows, unknownTokensMessage, unknownWidgetTypeMessage, updateWidget, widgetBodyLine, widgetFenceTag, wql, wqlCompletion, wqlCompletionSource, wqlFilterKeys, wqlGroupingDimensions, wqlHighlightStyle, wqlLanguage, parser as wqlParser, wql_parser_terms_exports as wqlTerms, zonedNoon, zonedStartOfDay };
5640
+ export { BUILD_TIME, CONTENT_GROUPING_DIMENSIONS, DASHBOARD_GRID_MAX_COLS, DASHBOARD_WIDGET_TYPES, DEFAULT_DASHBOARD_TITLE, DISCIPLINE_FACTORS, EFFORT_DISCIPLINES, GIT_SHA, PLANNED_WIDGET_TYPES, PageSourceRegistry, QueryDocumentRunner, QueryService, SEMVER, SOURCE_ID_SHAPES, QueryDocumentRunner2 as SharedQueryDocumentRunner, UNASSIGNED, VERSION, WQL_AGGREGATORS, WQL_CALC_TARGETS, WQL_CHART_HEADS, WQL_COMPARISON_OPS, WQL_CONTENT_FILTER_KEYS, WQL_CONTENT_ONLY_KEYS, WQL_DISPLAY_UNITS, WQL_EFFORT_FILTER_KEYS, WQL_FIND_TARGETS, WQL_FUNCTION_HEADS, WQL_GRAINS, WQL_INTENSITY_TIERS, WQL_KEYWORDS, WQL_METRIC_AGGREGATES, WQL_METRIC_FAMILIES, WQL_NOTE_DEFAULT_SOURCES, WQL_NOTE_HEAD_ALIASES, WQL_RESULT_PLANES, WQL_ROLLUP_PERIODS, WQL_SOURCES, WQL_SOURCE_HEADS, WQL_SOURCE_HEAD_SCOPES, WQL_SOURCE_VALUES, WQL_STANDARD_DATASETS, WQL_TAG_KEYS, WQL_TYPED_TAG_KEYS, WQL_TYPE_HEADS, WQL_VIRTUAL_DIMS, allowedFilterTypesForTarget, appendSuffixes, appendWidget, buildDashboardDocument, buildDashboardScaffold, buildDrillDownQuery, captureContext, chunkIdOfItem, civilDateAdd, civilDateDiff, civilDateOf, civilDatesCoveredByRange, civilMonday, consumesRollupFacts, convertDisplay, createBuiltinFormulaEvaluator, dashboardSlug, defaultTokenValues, disciplineFactorFor, duplicateWidget, eventsToStoredLogs, extractDashboardTokens, extractFrontmatterTags, feedIdOfItem, feedOfItem, findTargetAdvisories, getList, getScalar, getUnitFamily, hasLegacyIdentity, inRange, isAggregateQuery, isDashboardMeta, isDashboardWidgetType, isEffortDiscipline, isFindQuery, isItemSubscribed, isPipelineQuery, isProposedMetric, migrateLegacyChunkId, migrateLegacyDashboardBodies, migrateLegacyRouteId, migrateLegacyRow, migrateLegacySourceId, migrateLegacySourcePath, moveWidget, normalizeSummaryFacts, normalizeWql, notebookOfItem, notebookOriginOfItem, notebookSlugOfSourceId, parseDashboardNote, parseDocument, parseFlatProperties, parseFrontmatter, parseFrontmatterBody, parseFrontmatterCategories, parseFrontmatterProps, parseQuery, parseQueryWidgetSuffix, parseWqlSuffixes, projectEventToFacts, referencedTokens, removeWidget, renderWidgetGroup, resizeWidget, resolveCanonicalMetricKey, resolveOutputUnit, resolveWidgetType, resolveWindowRange, rowsParseError, serialize, serializeDocument, serializeFrontmatter, setDashboardTokenValue, sourceMatches, sourceShape, splitAtWhere, stripFrontmatter, substituteTokens2 as substituteTokens, substituteTokens as substituteTokensRaw, supportsWqlFilterKey, systemTimeZone, toEventRows, toSummaryEventRows, unknownTokensMessage, unknownWidgetTypeMessage, updateWidget, widgetBodyLine, widgetFenceTag, wql, wqlCompletion, wqlCompletionSource, wqlFilterKeys, wqlGroupingDimensions, wqlHighlightStyle, wqlLanguage, parser as wqlParser, wql_parser_terms_exports as wqlTerms, zonedNoon, zonedStartOfDay };
5490
5641
  //# sourceMappingURL=index.mjs.map
5491
5642
  //# sourceMappingURL=index.mjs.map