@lumenflow/cli 5.7.18 → 5.7.22

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (35) hide show
  1. package/README.md +63 -61
  2. package/dist/agent-runtime-enrollment-events.js +1 -1
  3. package/dist/agent-runtime-enrollment-events.js.map +1 -1
  4. package/dist/cost-summary.js +160 -3
  5. package/dist/cost-summary.js.map +1 -1
  6. package/dist/events-validate-core.js +169 -0
  7. package/dist/events-validate-core.js.map +1 -0
  8. package/dist/events-validate.js +48 -0
  9. package/dist/events-validate.js.map +1 -0
  10. package/dist/orchestrate-pre-phase-audit.js +83 -0
  11. package/dist/orchestrate-pre-phase-audit.js.map +1 -0
  12. package/dist/public-manifest.js +18 -2
  13. package/dist/public-manifest.js.map +1 -1
  14. package/dist/wu-claim-branch.js +2 -2
  15. package/dist/wu-claim-branch.js.map +1 -1
  16. package/dist/wu-claim-worktree.js +1 -1
  17. package/dist/wu-claim-worktree.js.map +1 -1
  18. package/dist/wu-claim.js +1 -1
  19. package/dist/wu-claim.js.map +1 -1
  20. package/dist/wu-create-orchestration-advisory.js +32 -0
  21. package/dist/wu-create-orchestration-advisory.js.map +1 -0
  22. package/dist/wu-create.js +24 -3
  23. package/dist/wu-create.js.map +1 -1
  24. package/dist/wu-proto.js +72 -6
  25. package/dist/wu-proto.js.map +1 -1
  26. package/dist/wu-spawn-strategy-resolver.js +74 -3
  27. package/dist/wu-spawn-strategy-resolver.js.map +1 -1
  28. package/package.json +13 -11
  29. package/packs/agent-runtime/package.json +1 -1
  30. package/packs/sidekick/package.json +1 -1
  31. package/packs/software-delivery/package.json +1 -1
  32. package/templates/core/AGENTS.md.template +4 -4
  33. package/templates/core/LUMENFLOW.md.template +5 -5
  34. package/templates/core/ai/onboarding/agent-invocation-guide.md.template +10 -4
  35. package/templates/core/ai/onboarding/quick-ref-commands.md.template +6 -2
package/README.md CHANGED
@@ -51,38 +51,38 @@ This package provides CLI commands for the LumenFlow workflow framework, includi
51
51
 
52
52
  ### Work Unit Management
53
53
 
54
- | Command | Description |
55
- | ------------------ | ----------------------------------------------------------------------------------- |
56
- | `approval-list` | List control-plane approvals with optional filters |
57
- | `approval-request` | Request control-plane approval for a workflow action |
58
- | `approval-review` | Resolve a control-plane approval decision |
59
- | `wu-block` | Block WU with reason |
60
- | `wu-brief` | Generate the canonical full WU handoff prompt and record brief evidence |
61
- | `wu-claim` | Claim WU and create worktree |
62
- | `wu-cleanup` | Cleanup after PR merge |
63
- | `wu-create` | Create new WU spec |
64
- | `wu-delegate` | Generate the canonical delegation handoff prompt and record explicit lineage intent |
65
- | `wu-delete` | Delete WU spec and cleanup |
66
- | `wu-deps` | Show WU dependencies |
67
- | `wu-done` | Complete WU (merge, stamp, cleanup) from main |
68
- | `wu-edit` | Edit WU spec fields |
69
- | `wu-escalate` | Show or resolve WU escalation status |
70
- | `wu-infer-lane` | Infer lane from code paths/description using workspace definitions |
71
- | `wu-preflight` | Pre-flight checks before wu:done |
72
- | `wu-prep` | Run gates in worktree, prep for wu:done |
73
- | `wu-proto` | Create WU prototype |
74
- | `wu-prune` | Clean stale worktrees |
75
- | `wu-recover` | Analyze and fix WU state inconsistencies |
76
- | `wu-release` | Release orphaned WU (in_progress to ready) |
77
- | `wu-rename` | Rename a WU (canonical WU IDs, --replay-only supported) |
78
- | `wu-repair` | Repair WU state issues |
79
- | `wu-review` | Review a WU worktree against the configured integration target |
80
- | `wu-sandbox` | Run command through hardened WU sandbox backend |
81
- | `wu-status` | Show WU status, location, valid commands |
82
- | `wu-unblock` | Unblock WU |
83
- | `wu-unlock-lane` | Unlock stuck lane |
84
- | `wu-validate` | Validate WU spec |
85
- | `wu-verify` | Verify WU completion (stamp, commit, clean tree) |
54
+ | Command | Description |
55
+ | ------------------ | --------------------------------------------------------------------------------------------------- |
56
+ | `approval-list` | List control-plane approvals with optional filters |
57
+ | `approval-request` | Request control-plane approval for a workflow action |
58
+ | `approval-review` | Resolve a control-plane approval decision |
59
+ | `wu-block` | Block WU with reason |
60
+ | `wu-brief` | Generate the canonical full WU handoff prompt, record evidence, and optionally report prompt tokens |
61
+ | `wu-claim` | Claim WU and create worktree |
62
+ | `wu-cleanup` | Cleanup after PR merge |
63
+ | `wu-create` | Create new WU spec |
64
+ | `wu-delegate` | Generate the canonical delegation handoff prompt and record explicit lineage intent |
65
+ | `wu-delete` | Delete WU spec and cleanup |
66
+ | `wu-deps` | Show WU dependencies |
67
+ | `wu-done` | Complete WU (merge, stamp, cleanup) from main |
68
+ | `wu-edit` | Edit WU spec fields |
69
+ | `wu-escalate` | Show or resolve WU escalation status |
70
+ | `wu-infer-lane` | Infer lane from code paths/description using workspace definitions |
71
+ | `wu-preflight` | Pre-flight checks before wu:done |
72
+ | `wu-prep` | Run gates in worktree, prep for wu:done |
73
+ | `wu-proto` | Create WU prototype |
74
+ | `wu-prune` | Clean stale worktrees |
75
+ | `wu-recover` | Analyze and fix WU state inconsistencies |
76
+ | `wu-release` | Release orphaned WU (in_progress to ready) |
77
+ | `wu-rename` | Rename a WU (canonical WU IDs, --replay-only supported) |
78
+ | `wu-repair` | Repair WU state issues |
79
+ | `wu-review` | Review a WU worktree against the configured integration target |
80
+ | `wu-sandbox` | Run command through hardened WU sandbox backend |
81
+ | `wu-status` | Show WU status, location, valid commands |
82
+ | `wu-unblock` | Unblock WU |
83
+ | `wu-unlock-lane` | Unlock stuck lane |
84
+ | `wu-validate` | Validate WU spec |
85
+ | `wu-verify` | Verify WU completion (stamp, commit, clean tree) |
86
86
 
87
87
  ### Memory & Session
88
88
 
@@ -109,38 +109,39 @@ This package provides CLI commands for the LumenFlow workflow framework, includi
109
109
 
110
110
  ### Initiative Orchestration
111
111
 
112
- | Command | Description |
113
- | ---------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
114
- | `agent-issues-query` | Query GitHub issues for agent work |
115
- | `agent-log-issue` | Log issue during agent session |
116
- | `agent-session` | Start agent session |
117
- | `agent-session-end` | End agent session |
118
- | `delegation-list` | List delegation and launch records with planned-versus-launched state |
119
- | `initiative-add-wu` | Add WU to initiative |
120
- | `initiative-bulk-assign-wus` | Bulk assign WUs to initiative |
121
- | `initiative-create` | Create new initiative |
122
- | `initiative-delete` | Delete an initiative with explicit linked-WU safeguards |
123
- | `initiative-edit` | Edit initiative fields and phase metadata |
124
- | `initiative-list` | List all initiatives |
125
- | `initiative-plan` | Link plan to initiative |
126
- | `initiative-remove-wu` | Remove WU from initiative |
127
- | `initiative-rename` | Rename an initiative and rewrite linked references |
128
- | `initiative-status` | Show initiative status |
129
- | `orchestrate-init-status` | Compact initiative status with evidence-based orchestration state |
130
- | `orchestrate-initiative` | Plan, launch, and reconcile initiative execution with structured orchestration artifacts; launch modes print lean summaries by default and can replay stored handoffs inline |
131
- | `orchestrate-monitor` | Monitor orchestration progress, stalls, returned workers, and recovery signals |
132
- | `task-claim` | Claim a task directly through KernelRuntime |
112
+ | Command | Description |
113
+ | ----------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
114
+ | `agent-issues-query` | Query GitHub issues for agent work |
115
+ | `agent-log-issue` | Log issue during agent session |
116
+ | `agent-session` | Start agent session |
117
+ | `agent-session-end` | End agent session |
118
+ | `delegation-list` | List delegation and launch records with planned-versus-launched state |
119
+ | `initiative-add-wu` | Add WU to initiative |
120
+ | `initiative-bulk-assign-wus` | Bulk assign WUs to initiative |
121
+ | `initiative-create` | Create new initiative |
122
+ | `initiative-delete` | Delete an initiative with explicit linked-WU safeguards |
123
+ | `initiative-edit` | Edit initiative fields and phase metadata |
124
+ | `initiative-list` | List all initiatives |
125
+ | `initiative-plan` | Link plan to initiative |
126
+ | `initiative-remove-wu` | Remove WU from initiative |
127
+ | `initiative-rename` | Rename an initiative and rewrite linked references |
128
+ | `initiative-status` | Show initiative status |
129
+ | `orchestrate-init-status` | Compact initiative status with evidence-based orchestration state |
130
+ | `orchestrate-initiative` | Plan, launch, and reconcile initiative execution with structured orchestration artifacts; launch modes print lean summaries by default and can replay stored handoffs inline |
131
+ | `orchestrate-monitor` | Monitor orchestration progress, stalls, returned workers, and recovery signals |
132
+ | `orchestrate-pre-phase-audit` | Print a read-only pre-phase audit checklist before creating phase WUs |
133
+ | `task-claim` | Claim a task directly through KernelRuntime |
133
134
 
134
135
  ### Metrics & Analytics
135
136
 
136
- | Command | Description |
137
- | ------------------- | ------------------------------ |
138
- | `cost-summary` | Summarize local cost telemetry |
139
- | `flow-bottlenecks` | Identify flow bottlenecks |
140
- | `flow-report` | Generate flow metrics report |
141
- | `lumenflow-metrics` | View workflow metrics (alias) |
142
- | `metrics` | View workflow metrics |
143
- | `metrics-snapshot` | Capture metrics snapshot |
137
+ | Command | Description |
138
+ | ------------------- | ------------------------------------------------------------ |
139
+ | `cost-summary` | Summarize local cost telemetry or brief metrics with --brief |
140
+ | `flow-bottlenecks` | Identify flow bottlenecks |
141
+ | `flow-report` | Generate flow metrics report |
142
+ | `lumenflow-metrics` | View workflow metrics (alias) |
143
+ | `metrics` | View workflow metrics |
144
+ | `metrics-snapshot` | Capture metrics snapshot |
144
145
 
145
146
  ### Lane Tooling
146
147
 
@@ -161,6 +162,7 @@ This package provides CLI commands for the LumenFlow workflow framework, includi
161
162
 
162
163
  | Command | Description |
163
164
  | ---------------------------- | ------------------------------------------------------------------ |
165
+ | `events-validate` | Validate event payloads against the published schema catalog |
164
166
  | `gate-co-change` | Manage co-change gate rules (add, remove, edit, list) |
165
167
  | `gate-conditional` | Manage conditional_commands gate entries (add, remove, edit, list) |
166
168
  | `gates` | Run all quality gates |
@@ -2,7 +2,7 @@
2
2
  // SPDX-License-Identifier: LicenseRef-LumenFlow-Proprietary
3
3
  import { buildKernelEventV2 } from './kernel-event-sync/emitters.js';
4
4
  export const AGENT_RUNTIME_CHANNEL_ID = 'agent-runtime';
5
- const AGENT_RUNTIME_ENROLLMENT_EVENT_KINDS = {
5
+ export const AGENT_RUNTIME_ENROLLMENT_EVENT_KINDS = {
6
6
  AGENT_SESSION_ENROLLED: 'agent-runtime:agent_session_enrolled',
7
7
  AGENT_SESSION_ENDED: 'agent-runtime:agent_session_ended',
8
8
  AGENT_SESSION_STALLED: 'agent-runtime:agent_session_stalled',
@@ -1 +1 @@
1
- {"version":3,"file":"agent-runtime-enrollment-events.js","sourceRoot":"","sources":["../src/agent-runtime-enrollment-events.ts"],"names":[],"mappings":"AAAA,iCAAiC;AACjC,4DAA4D;AAE5D,OAAO,EAAE,kBAAkB,EAAgC,MAAM,iCAAiC,CAAC;AAEnG,MAAM,CAAC,MAAM,wBAAwB,GAAG,eAAwB,CAAC;AAEjE,MAAM,oCAAoC,GAAG;IAC3C,sBAAsB,EAAE,sCAAsC;IAC9D,mBAAmB,EAAE,mCAAmC;IACxD,qBAAqB,EAAE,qCAAqC;CACpD,CAAC;AAoCX,MAAM,kBAAkB,GAAG,IAAI,GAAG,EAAkB,CAAC;AAErD,MAAM,UAAU,8BAA8B,CAC5C,KAAqF,EACrF,OAAiC;IAEjC,OAAO,oBAAoB,CACzB;QACE,IAAI,EAAE,oCAAoC,CAAC,sBAAsB;QACjE,GAAG,KAAK;KACT,EACD,OAAO,CACR,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,2BAA2B,CACzC,KAAkF,EAClF,OAAiC;IAEjC,OAAO,oBAAoB,CACzB;QACE,IAAI,EAAE,oCAAoC,CAAC,mBAAmB;QAC9D,GAAG,KAAK;KACT,EACD,OAAO,CACR,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,6BAA6B,CAC3C,KAAoF,EACpF,OAAiC;IAEjC,OAAO,oBAAoB,CACzB;QACE,IAAI,EAAE,oCAAoC,CAAC,qBAAqB;QAChE,GAAG,KAAK;KACT,EACD,OAAO,CACR,CAAC;AACJ,CAAC;AAED,SAAS,oBAAoB,CAC3B,OAAU,EACV,OAAiC;IAEjC,MAAM,SAAS,GAAG,kBAAkB,CAAC,OAAgB,EAAE,OAAO,CAI7D,CAAC;IAEF,OAAO;QACL,GAAG,SAAS;QACZ,GAAG,OAAO;QACV,UAAU,EAAE,wBAAwB;QACpC,GAAG,EAAE,OAAO,CAAC,wBAAwB,CAAC;KACvC,CAAC;AACJ,CAAC;AAED,SAAS,OAAO,CAAC,SAAiB;IAChC,MAAM,OAAO,GAAG,kBAAkB,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IACvD,MAAM,IAAI,GAAG,OAAO,GAAG,CAAC,CAAC;IACzB,kBAAkB,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IACxC,OAAO,IAAI,CAAC;AACd,CAAC"}
1
+ {"version":3,"file":"agent-runtime-enrollment-events.js","sourceRoot":"","sources":["../src/agent-runtime-enrollment-events.ts"],"names":[],"mappings":"AAAA,iCAAiC;AACjC,4DAA4D;AAE5D,OAAO,EAAE,kBAAkB,EAAgC,MAAM,iCAAiC,CAAC;AAEnG,MAAM,CAAC,MAAM,wBAAwB,GAAG,eAAwB,CAAC;AAEjE,MAAM,CAAC,MAAM,oCAAoC,GAAG;IAClD,sBAAsB,EAAE,sCAAsC;IAC9D,mBAAmB,EAAE,mCAAmC;IACxD,qBAAqB,EAAE,qCAAqC;CACpD,CAAC;AAoCX,MAAM,kBAAkB,GAAG,IAAI,GAAG,EAAkB,CAAC;AAErD,MAAM,UAAU,8BAA8B,CAC5C,KAAqF,EACrF,OAAiC;IAEjC,OAAO,oBAAoB,CACzB;QACE,IAAI,EAAE,oCAAoC,CAAC,sBAAsB;QACjE,GAAG,KAAK;KACT,EACD,OAAO,CACR,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,2BAA2B,CACzC,KAAkF,EAClF,OAAiC;IAEjC,OAAO,oBAAoB,CACzB;QACE,IAAI,EAAE,oCAAoC,CAAC,mBAAmB;QAC9D,GAAG,KAAK;KACT,EACD,OAAO,CACR,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,6BAA6B,CAC3C,KAAoF,EACpF,OAAiC;IAEjC,OAAO,oBAAoB,CACzB;QACE,IAAI,EAAE,oCAAoC,CAAC,qBAAqB;QAChE,GAAG,KAAK;KACT,EACD,OAAO,CACR,CAAC;AACJ,CAAC;AAED,SAAS,oBAAoB,CAC3B,OAAU,EACV,OAAiC;IAEjC,MAAM,SAAS,GAAG,kBAAkB,CAAC,OAAgB,EAAE,OAAO,CAI7D,CAAC;IAEF,OAAO;QACL,GAAG,SAAS;QACZ,GAAG,OAAO;QACV,UAAU,EAAE,wBAAwB;QACpC,GAAG,EAAE,OAAO,CAAC,wBAAwB,CAAC;KACvC,CAAC;AACJ,CAAC;AAED,SAAS,OAAO,CAAC,SAAiB;IAChC,MAAM,OAAO,GAAG,kBAAkB,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IACvD,MAAM,IAAI,GAAG,OAAO,GAAG,CAAC,CAAC;IACzB,kBAAkB,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IACxC,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -5,9 +5,11 @@ import { existsSync, readFileSync } from 'node:fs';
5
5
  import { Command } from 'commander';
6
6
  import { runCLI } from './cli-entry-point.js';
7
7
  const DEFAULT_COSTS_PATH = '.lumenflow/telemetry/costs.ndjson';
8
+ export const DEFAULT_BRIEF_METRICS_PATH = '.lumenflow/telemetry/brief-metrics.ndjson';
8
9
  const DEFAULT_GROUP_KEY = 'unknown';
9
10
  const LOG_PREFIX = '[cost:summary]';
10
11
  const SOURCE_TYPE_COST = 'cost';
12
+ const BRIEF_METRIC_KIND = 'brief:token_reported';
11
13
  function asNonEmptyString(value) {
12
14
  if (typeof value !== 'string')
13
15
  return undefined;
@@ -72,6 +74,87 @@ export function readCostEvents(costsPath = DEFAULT_COSTS_PATH) {
72
74
  .map((line) => parseCostEventLine(line))
73
75
  .filter((event) => event !== null);
74
76
  }
77
+ function asNonNegativeInteger(value) {
78
+ return typeof value === 'number' && Number.isInteger(value) && value >= 0 ? value : undefined;
79
+ }
80
+ function parseBriefMetricSections(value) {
81
+ if (!Array.isArray(value)) {
82
+ return undefined;
83
+ }
84
+ const sections = [];
85
+ for (const item of value) {
86
+ if (typeof item !== 'object' || item === null) {
87
+ return undefined;
88
+ }
89
+ const record = item;
90
+ const name = asNonEmptyString(record.name);
91
+ const tokens = asNonNegativeInteger(record.tokens);
92
+ if (!name || tokens === undefined) {
93
+ return undefined;
94
+ }
95
+ sections.push({
96
+ name,
97
+ tokens,
98
+ ...(typeof record.stable === 'boolean' ? { stable: record.stable } : {}),
99
+ });
100
+ }
101
+ return sections;
102
+ }
103
+ export function parseBriefMetricLine(line) {
104
+ const trimmed = line.trim();
105
+ if (trimmed.length === 0) {
106
+ return null;
107
+ }
108
+ let parsed;
109
+ try {
110
+ parsed = JSON.parse(trimmed);
111
+ }
112
+ catch {
113
+ return null;
114
+ }
115
+ if (typeof parsed !== 'object' || parsed === null) {
116
+ return null;
117
+ }
118
+ const record = parsed;
119
+ if (record.schema_version !== 2 || record.kind !== BRIEF_METRIC_KIND) {
120
+ return null;
121
+ }
122
+ const timestamp = asNonEmptyString(record.timestamp);
123
+ const generatedAt = asNonEmptyString(record.generated_at) ?? timestamp;
124
+ const wuId = asNonEmptyString(record.wu_id);
125
+ const clientName = asNonEmptyString(record.client_name) ?? asNonEmptyString(record.client);
126
+ const promptHash = asNonEmptyString(record.prompt_hash);
127
+ const totalTokens = asNonNegativeInteger(record.total_tokens);
128
+ const sections = parseBriefMetricSections(record.sections);
129
+ if (!timestamp || !generatedAt || !wuId || !clientName || !promptHash) {
130
+ return null;
131
+ }
132
+ if (totalTokens === undefined || sections === undefined) {
133
+ return null;
134
+ }
135
+ return {
136
+ timestamp,
137
+ generatedAt,
138
+ wuId,
139
+ clientName,
140
+ promptHash,
141
+ totalTokens,
142
+ sections,
143
+ stablePrefixHash: asNonEmptyString(record.stable_prefix_hash),
144
+ stablePrefixTokens: asNonNegativeInteger(record.stable_prefix_tokens),
145
+ volatileTailTokens: asNonNegativeInteger(record.volatile_tail_tokens),
146
+ };
147
+ }
148
+ export function readBriefMetricEvents(metricsPath = DEFAULT_BRIEF_METRICS_PATH) {
149
+ if (!existsSync(metricsPath)) {
150
+ return [];
151
+ }
152
+ const content = readFileSync(metricsPath, 'utf-8');
153
+ return content
154
+ .split('\n')
155
+ .map((line) => parseBriefMetricLine(line))
156
+ .filter((event) => event !== null);
157
+ }
75
158
  function sortRowsDescending(rows) {
76
159
  return [...rows].sort((a, b) => b.costUsd - a.costUsd || b.eventCount - a.eventCount);
77
160
  }
@@ -112,6 +195,38 @@ export function summarizeCostEvents(events) {
112
195
  }
113
196
  return summary;
114
197
  }
198
+ function sortBriefRowsDescending(rows) {
199
+ return [...rows].sort((a, b) => b.totalTokens - a.totalTokens || b.eventCount - a.eventCount || a.key.localeCompare(b.key));
200
+ }
201
+ function buildBriefGroupedRows(events, keySelector) {
202
+ const byKey = new Map();
203
+ for (const event of events) {
204
+ const key = keySelector(event) ?? DEFAULT_GROUP_KEY;
205
+ const current = byKey.get(key) ?? {
206
+ key,
207
+ totalTokens: 0,
208
+ eventCount: 0,
209
+ averageTokens: 0,
210
+ };
211
+ current.totalTokens += event.totalTokens;
212
+ current.eventCount += 1;
213
+ current.averageTokens = current.totalTokens / current.eventCount;
214
+ byKey.set(key, current);
215
+ }
216
+ return sortBriefRowsDescending(Array.from(byKey.values()));
217
+ }
218
+ export function summarizeBriefMetricEvents(events) {
219
+ const totalTokens = events.reduce((sum, event) => sum + event.totalTokens, 0);
220
+ const eventCount = events.length;
221
+ return {
222
+ totalTokens,
223
+ eventCount,
224
+ averageTokens: eventCount > 0 ? totalTokens / eventCount : 0,
225
+ byWu: buildBriefGroupedRows(events, (event) => event.wuId),
226
+ byClient: buildBriefGroupedRows(events, (event) => event.clientName),
227
+ byDate: buildBriefGroupedRows(events, (event) => event.generatedAt.slice(0, 10)),
228
+ };
229
+ }
115
230
  function formatRows(title, rows) {
116
231
  const lines = [];
117
232
  lines.push(title);
@@ -139,12 +254,39 @@ export function formatCostSummary(summary) {
139
254
  lines.push(...formatRows('By WU:', summary.byWu));
140
255
  return lines.join('\n');
141
256
  }
257
+ function formatBriefRows(title, rows) {
258
+ const lines = [];
259
+ lines.push(title);
260
+ if (rows.length === 0) {
261
+ lines.push(' (none)');
262
+ return lines;
263
+ }
264
+ for (const row of rows) {
265
+ lines.push(` - ${row.key}: ${row.totalTokens} tokens (${row.eventCount} briefs, avg=${Math.round(row.averageTokens)})`);
266
+ }
267
+ return lines;
268
+ }
269
+ export function formatBriefMetricsSummary(summary) {
270
+ const lines = [];
271
+ lines.push('Brief Metrics Summary');
272
+ lines.push(` Briefs: ${summary.eventCount}`);
273
+ lines.push(` Total Tokens: ${summary.totalTokens}`);
274
+ lines.push(` Average Tokens: ${Math.round(summary.averageTokens)}`);
275
+ lines.push('');
276
+ lines.push(...formatBriefRows('By WU:', summary.byWu));
277
+ lines.push('');
278
+ lines.push(...formatBriefRows('By Client:', summary.byClient));
279
+ lines.push('');
280
+ lines.push(...formatBriefRows('By Date:', summary.byDate));
281
+ return lines.join('\n');
282
+ }
142
283
  function parseArgs() {
143
284
  const program = new Command()
144
285
  .name('cost-summary')
145
- .description('Summarize local cost telemetry from .lumenflow/telemetry/costs.ndjson')
286
+ .description('Summarize local cost or brief metrics telemetry')
146
287
  .option('--json', 'Output JSON instead of human-readable text', false)
147
- .option('--path <path>', `Path to costs NDJSON file (default: ${DEFAULT_COSTS_PATH})`)
288
+ .option('--brief', `Summarize brief metrics from ${DEFAULT_BRIEF_METRICS_PATH}`, false)
289
+ .option('--path <path>', 'Path to telemetry NDJSON file')
148
290
  .exitOverride();
149
291
  try {
150
292
  program.parse(process.argv);
@@ -157,13 +299,28 @@ function parseArgs() {
157
299
  throw err;
158
300
  }
159
301
  const options = program.opts();
302
+ const brief = options.brief ?? false;
160
303
  return {
161
304
  json: options.json ?? false,
162
- path: options.path ?? DEFAULT_COSTS_PATH,
305
+ path: options.path ?? (brief ? DEFAULT_BRIEF_METRICS_PATH : DEFAULT_COSTS_PATH),
306
+ brief,
163
307
  };
164
308
  }
165
309
  export async function main() {
166
310
  const options = parseArgs();
311
+ if (options.brief) {
312
+ const events = readBriefMetricEvents(options.path);
313
+ const summary = summarizeBriefMetricEvents(events);
314
+ if (events.length === 0) {
315
+ console.log(`${LOG_PREFIX} No brief metrics telemetry found at ${options.path}`);
316
+ }
317
+ if (options.json) {
318
+ console.log(JSON.stringify(summary, null, 2));
319
+ return;
320
+ }
321
+ console.log(formatBriefMetricsSummary(summary));
322
+ return;
323
+ }
167
324
  const events = readCostEvents(options.path);
168
325
  const summary = summarizeCostEvents(events);
169
326
  if (events.length === 0) {
@@ -1 +1 @@
1
- {"version":3,"file":"cost-summary.js","sourceRoot":"","sources":["../src/cost-summary.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cost-summary.js","sourceRoot":"","sources":["../src/cost-summary.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,169 @@
1
+ // Copyright (c) 2026 Hellmai Ltd
2
+ // SPDX-License-Identifier: LicenseRef-LumenFlow-Proprietary
3
+ import { existsSync, readdirSync, readFileSync, statSync } from 'node:fs';
4
+ import { join } from 'node:path';
5
+ import { z } from 'zod';
6
+ import { createError, ErrorCodes } from '@lumenflow/core/error-handler';
7
+ import { buildEventSchemaIndex, EVENT_SCHEMA_FAMILIES, validateEventWithSchemaIndex, } from '@lumenflow/control-plane-sdk';
8
+ import { AGENT_RUNTIME_CHANNEL_ID, AGENT_RUNTIME_ENROLLMENT_EVENT_KINDS, } from './agent-runtime-enrollment-events.js';
9
+ import { SOFTWARE_DELIVERY_CHANNEL_ID, SOFTWARE_DELIVERY_EVENT_KIND_VALUES, } from './kernel-event-sync/software-delivery-emitters.js';
10
+ const DEFAULT_VALID_FIXTURE_DIR = '.lumenflow/schemas/events/fixtures/valid';
11
+ const NON_EMPTY_STRING = z.string().min(1);
12
+ const NON_NEGATIVE_INT = z.number().int().nonnegative();
13
+ export const DEFAULT_EVENTS_VALIDATE_PATHS = [DEFAULT_VALID_FIXTURE_DIR];
14
+ const softwareDeliveryEventSchema = z
15
+ .object({
16
+ schema_version: z.literal(2),
17
+ kind: z.enum(SOFTWARE_DELIVERY_EVENT_KIND_VALUES),
18
+ timestamp: NON_EMPTY_STRING,
19
+ event_id: NON_EMPTY_STRING,
20
+ channel_id: z.literal(SOFTWARE_DELIVERY_CHANNEL_ID),
21
+ seq: NON_NEGATIVE_INT,
22
+ })
23
+ .passthrough();
24
+ const agentRuntimeEventSchema = z
25
+ .object({
26
+ schema_version: z.literal(2),
27
+ kind: z.enum([
28
+ AGENT_RUNTIME_ENROLLMENT_EVENT_KINDS.AGENT_SESSION_ENROLLED,
29
+ AGENT_RUNTIME_ENROLLMENT_EVENT_KINDS.AGENT_SESSION_ENDED,
30
+ AGENT_RUNTIME_ENROLLMENT_EVENT_KINDS.AGENT_SESSION_STALLED,
31
+ ]),
32
+ timestamp: NON_EMPTY_STRING,
33
+ event_id: NON_EMPTY_STRING,
34
+ channel_id: z.literal(AGENT_RUNTIME_CHANNEL_ID),
35
+ seq: NON_NEGATIVE_INT,
36
+ session_id: NON_EMPTY_STRING,
37
+ wu_id: NON_EMPTY_STRING,
38
+ lane: NON_EMPTY_STRING,
39
+ })
40
+ .passthrough();
41
+ export const CLI_EVENT_SCHEMA_FAMILIES = [
42
+ ...EVENT_SCHEMA_FAMILIES,
43
+ {
44
+ id: 'software-delivery-events',
45
+ title: 'LumenFlow Software Delivery Event Envelope',
46
+ schema_id: 'https://schemas.lumenflow.dev/events/software-delivery-events.v1.schema.json',
47
+ file_name: 'software-delivery-events.v1.schema.json',
48
+ notes: [
49
+ 'Audits the schema_version=2 software-delivery pack event family emitted from the CLI.',
50
+ 'The validator checks the shared envelope, channel, sequence, and known kind set; kind-specific payload tests remain with the emitters.',
51
+ ],
52
+ schemas: [
53
+ ...SOFTWARE_DELIVERY_EVENT_KIND_VALUES.map((kind) => ({
54
+ kind,
55
+ schema: softwareDeliveryEventSchema.extend({ kind: z.literal(kind) }),
56
+ })),
57
+ ],
58
+ },
59
+ {
60
+ id: 'agent-runtime-events',
61
+ title: 'LumenFlow Agent Runtime Event Envelope',
62
+ schema_id: 'https://schemas.lumenflow.dev/events/agent-runtime-events.v1.schema.json',
63
+ file_name: 'agent-runtime-events.v1.schema.json',
64
+ notes: [
65
+ 'Audits the schema_version=2 agent-runtime enrollment/stall event family.',
66
+ 'This is the agent-runtime counterpart to the INIT-072 measurement/routing event plane.',
67
+ ],
68
+ schemas: [
69
+ ...Object.values(AGENT_RUNTIME_ENROLLMENT_EVENT_KINDS).map((kind) => ({
70
+ kind,
71
+ schema: agentRuntimeEventSchema.extend({ kind: z.literal(kind) }),
72
+ })),
73
+ ],
74
+ },
75
+ ];
76
+ const CLI_EVENT_SCHEMA_INDEX = buildEventSchemaIndex(CLI_EVENT_SCHEMA_FAMILIES);
77
+ export function validateEventRecords(records) {
78
+ const issues = [];
79
+ for (const [index, record] of records.entries()) {
80
+ const result = validateEventWithSchemaIndex(record, CLI_EVENT_SCHEMA_INDEX);
81
+ for (const issue of result.issues) {
82
+ issues.push({
83
+ ...issue,
84
+ path: `$[${index}]${issue.path === '$' ? '' : issue.path.slice(1)}`,
85
+ });
86
+ }
87
+ }
88
+ return {
89
+ valid: issues.length === 0,
90
+ total: records.length,
91
+ invalid: issues.length === 0 ? 0 : countInvalidRecords(issues),
92
+ issues,
93
+ };
94
+ }
95
+ export function validateEventsText(text) {
96
+ return validateEventRecords(parseEventRecords(text));
97
+ }
98
+ export function loadEventRecordsFromPath(inputPath) {
99
+ if (!existsSync(inputPath)) {
100
+ throw createError(ErrorCodes.FILE_NOT_FOUND, `Event validation input does not exist: ${inputPath}`, { inputPath });
101
+ }
102
+ const stats = statSync(inputPath);
103
+ if (stats.isDirectory()) {
104
+ return listEventFiles(inputPath).flatMap((filePath) => loadEventRecordsFromPath(filePath));
105
+ }
106
+ return parseEventRecords(readFileSync(inputPath, 'utf-8'));
107
+ }
108
+ export function formatValidationSummary(summary) {
109
+ const lines = [
110
+ `events:validate ${summary.valid ? 'passed' : 'failed'}`,
111
+ ` Events: ${summary.total}`,
112
+ ` Invalid: ${summary.invalid}`,
113
+ ];
114
+ for (const issue of summary.issues) {
115
+ lines.push(` - ${issue.code} ${issue.path}: ${issue.message}`);
116
+ }
117
+ return lines.join('\n');
118
+ }
119
+ function parseEventRecords(text) {
120
+ const trimmed = text.trim();
121
+ if (!trimmed) {
122
+ return [];
123
+ }
124
+ try {
125
+ const parsed = JSON.parse(trimmed);
126
+ return normalizeParsedEventInput(parsed);
127
+ }
128
+ catch {
129
+ return trimmed.split('\n').map((line, index) => parseNdjsonLine(line, index + 1));
130
+ }
131
+ }
132
+ function normalizeParsedEventInput(parsed) {
133
+ if (Array.isArray(parsed)) {
134
+ return parsed;
135
+ }
136
+ if (parsed &&
137
+ typeof parsed === 'object' &&
138
+ Array.isArray(parsed.events)) {
139
+ return parsed.events;
140
+ }
141
+ return [parsed];
142
+ }
143
+ function parseNdjsonLine(line, lineNumber) {
144
+ try {
145
+ return JSON.parse(line);
146
+ }
147
+ catch (error) {
148
+ const message = error instanceof Error ? error.message : String(error);
149
+ throw createError(ErrorCodes.PARSE_ERROR, `Failed to parse event NDJSON line ${lineNumber}: ${message}`, { lineNumber, cause: message });
150
+ }
151
+ }
152
+ function listEventFiles(dir) {
153
+ const files = [];
154
+ for (const entry of readdirSync(dir, { withFileTypes: true })) {
155
+ const entryPath = join(dir, entry.name);
156
+ if (entry.isDirectory()) {
157
+ files.push(...listEventFiles(entryPath));
158
+ continue;
159
+ }
160
+ if (entry.isFile()) {
161
+ files.push(entryPath);
162
+ }
163
+ }
164
+ return files.sort();
165
+ }
166
+ function countInvalidRecords(issues) {
167
+ return new Set(issues.map((issue) => issue.path.match(/^\$\[(\d+)\]/)?.[1] ?? issue.path)).size;
168
+ }
169
+ //# sourceMappingURL=events-validate-core.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"events-validate-core.js","sourceRoot":"","sources":["../src/events-validate-core.ts"],"names":[],"mappings":"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"}