lumitrace 0.6.0 → 0.6.2

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 4511842d6a3c76fbf50be2da922a089e852adfe571d952efe770e536060d2ab2
4
- data.tar.gz: e24617018967e09c04e8d79079e1182ae32b64f8ff69a2046bb802e1daadd6a9
3
+ metadata.gz: 4de22b014b5ce2ce0e63b230487c6888147ee99459a2ef832ccae42a9b6004c6
4
+ data.tar.gz: 78cb61f36f9764daa1898eae3897090a92c2d44dd422a31589db983b7a951ec7
5
5
  SHA512:
6
- metadata.gz: aeb9654b4eb02f0b0d60a1f15567d5abd591b27abb1e3b1acf660b19f3e23ddd74487699e667a15d533d793bdc6f4700f2d8f5ee4a6ee0ec9507ae6053f164be
7
- data.tar.gz: 98a92961b2dc9cf10e50fe7310cfdd5f4d6c138fc13f41a9485a4cdad0a68007145c7bfb5c5f1cfe4980733f6a287c8ceb7a133b1bd41d6cf19612d9275a61d8
6
+ metadata.gz: 1ac281aaf18f6f0382af924d9d2ef850ae27353e10255114e90cce2121bcdaa5572d077c3edb3b8dde465bb8a820804aa039abab4af0420bbcbc8381ffca112d
7
+ data.tar.gz: 6df68f6e6c1769616c584278fdca6be2c736c8c5a99ddab37b5a86c42b66d056edeb51b041a9e0c53b11db324fa219e72a5c1bfe6c968ee4dfe6869f350f1219
data/docs/ai-help.md CHANGED
@@ -2,7 +2,9 @@
2
2
 
3
3
  # Lumitrace Help
4
4
 
5
- - Version: 0.4.1
5
+ AI agents: run `lumitrace help --format json` to get structured help.
6
+
7
+ - Version: 0.6.1
6
8
  - Help version: 1
7
9
  - Primary JSON entrypoint: `lumitrace help --format json`
8
10
  - Schema JSON entrypoint: `lumitrace schema --format json`
@@ -37,11 +39,16 @@
37
39
  ## Key Options
38
40
  - `--collect-mode` (default="last"; values=last,types,history)
39
41
  - `--max-samples` (default=3; Used by history mode.)
40
- - `--json[=PATH]` (Emit JSON output.)
41
- - `--html[=PATH]` (Emit HTML output.)
42
- - `--text[=PATH]` (Emit text output.)
42
+ - `-j, --json[=PATH]` (Emit JSON output.)
43
+ - `-h, --html[=PATH]` (Emit HTML output.)
44
+ - `-t, --text[=PATH]` (Emit text output.)
45
+ - `-g, --git-diff[=MODE]` (Restrict instrumentation to diff hunks.)
43
46
  - `--range SPEC` (repeatable=true; Restrict instrumentation to file ranges.)
44
- - `--git-diff[=MODE]` (Restrict instrumentation to diff hunks.)
47
+ - `--git-diff-context N` (Expand diff hunks by +/-N lines.)
48
+ - `--git-cmd PATH` (Git executable for diff.)
49
+ - `--git-diff-no-untracked` (Exclude untracked files from diff.)
50
+ - `--root PATH` (Root directory for instrumentation.)
51
+ - `--verbose[=LEVEL]` (Verbose logs to stderr (level 1-3).)
45
52
 
46
53
  ## Examples
47
54
  - `lumitrace --collect-mode history --max-samples 5 -j app.rb`
data/docs/ai-schema.md CHANGED
@@ -2,9 +2,12 @@
2
2
 
3
3
  # Lumitrace JSON Schema
4
4
 
5
- - Version: 0.4.1
5
+ - Version: 0.6.1
6
6
  - Schema version: 1
7
- - Top level: array of event
7
+ - Top level: object
8
+ - `version` (integer) - Schema version number.
9
+ - `events` (array of event) - Traced expression events.
10
+ - `coverage` (array of coverage_entry) - Per-file coverage summary.
8
11
 
9
12
  ## Common Event Fields
10
13
  - `file` (string, required) - Absolute source path.
@@ -14,9 +17,15 @@
14
17
  - `end_col` (integer, required)
15
18
  - `kind` (string, required)
16
19
  - `name` (string|null, optional) - Present for kind=arg.
17
- - `total` (integer, required) - Execution count.
20
+ - `total` (integer, required) - Execution count. 0 means the expression was never executed (uncovered).
18
21
  - `types` (object, required) - Ruby class name => observed count.
19
22
 
23
+ ## Coverage Entry Fields
24
+ - `file` (string, required) - Absolute source path.
25
+ - `total_lines` (integer, required) - Number of traced expression lines.
26
+ - `covered_lines` (integer, required) - Lines with total > 0.
27
+ - `coverage_percent` (float, required) - Covered / total * 100, rounded to 1 decimal.
28
+
20
29
  ## Value Summary Fields
21
30
  - `type` (string, required) - Ruby class name.
22
31
  - `preview` (string, required) - Value preview string (inspect-based).
@@ -20,6 +20,8 @@ module Lumitrace
20
20
  lines = []
21
21
  lines << "# Lumitrace Help"
22
22
  lines << ""
23
+ lines << "AI agents: run `lumitrace help --format json` to get structured help."
24
+ lines << ""
23
25
  lines << "- Version: #{data[:version]}"
24
26
  lines << "- Help version: #{data[:help_version]}"
25
27
  lines << "- Primary JSON entrypoint: `#{data[:entrypoint][:primary]}`"
@@ -70,7 +72,17 @@ module Lumitrace
70
72
  lines << ""
71
73
  lines << "- Version: #{data[:version]}"
72
74
  lines << "- Schema version: #{data[:schema_version]}"
73
- lines << "- Top level: #{data[:json_top_level][:type]} of #{data[:json_top_level][:items]}"
75
+ top = data[:json_top_level]
76
+ if top[:type] == "object" && top[:fields]
77
+ lines << "- Top level: #{top[:type]}"
78
+ top[:fields].each do |name, spec|
79
+ type_text = spec[:items] ? "#{spec[:type]} of #{spec[:items]}" : spec[:type].to_s
80
+ desc = spec[:description] ? " - #{spec[:description]}" : ""
81
+ lines << " - `#{name}` (#{type_text})#{desc}"
82
+ end
83
+ else
84
+ lines << "- Top level: #{top[:type]} of #{top[:items]}"
85
+ end
74
86
  lines << ""
75
87
  lines << "## Common Event Fields"
76
88
  data[:event_common_fields].each do |name, spec|
@@ -79,6 +91,16 @@ module Lumitrace
79
91
  desc = spec[:description] ? " - #{spec[:description]}" : ""
80
92
  lines << "- `#{name}` (#{type_text}, #{req})#{desc}"
81
93
  end
94
+ if data[:coverage_entry_fields]
95
+ lines << ""
96
+ lines << "## Coverage Entry Fields"
97
+ data[:coverage_entry_fields].each do |name, spec|
98
+ req = spec[:required] ? "required" : "optional"
99
+ type_text = Array(spec[:type]).join("|")
100
+ desc = spec[:description] ? " - #{spec[:description]}" : ""
101
+ lines << "- `#{name}` (#{type_text}, #{req})#{desc}"
102
+ end
103
+ end
82
104
  lines << ""
83
105
  lines << "## Value Summary Fields"
84
106
  data[:value_summary_fields].each do |name, spec|
@@ -56,11 +56,16 @@ module Lumitrace
56
56
  key_options: [
57
57
  { name: "--collect-mode", values: COLLECT_MODES, default: "last" },
58
58
  { name: "--max-samples", type: "Integer", default: 3, note: "Used by history mode." },
59
- { name: "--json[=PATH]", type: "bool|string", note: "Emit JSON output." },
60
- { name: "--html[=PATH]", type: "bool|string", note: "Emit HTML output." },
61
- { name: "--text[=PATH]", type: "bool|string", note: "Emit text output." },
59
+ { name: "-j, --json[=PATH]", type: "bool|string", note: "Emit JSON output." },
60
+ { name: "-h, --html[=PATH]", type: "bool|string", note: "Emit HTML output." },
61
+ { name: "-t, --text[=PATH]", type: "bool|string", note: "Emit text output." },
62
+ { name: "-g, --git-diff[=MODE]", type: "string", note: "Restrict instrumentation to diff hunks." },
62
63
  { name: "--range SPEC", type: "string", repeatable: true, note: "Restrict instrumentation to file ranges." },
63
- { name: "--git-diff[=MODE]", type: "string", note: "Restrict instrumentation to diff hunks." }
64
+ { name: "--git-diff-context N", type: "Integer", note: "Expand diff hunks by +/-N lines." },
65
+ { name: "--git-cmd PATH", type: "string", note: "Git executable for diff." },
66
+ { name: "--git-diff-no-untracked", type: "bool", note: "Exclude untracked files from diff." },
67
+ { name: "--root PATH", type: "string", note: "Root directory for instrumentation." },
68
+ { name: "--verbose[=LEVEL]", type: "Integer", note: "Verbose logs to stderr (level 1-3)." }
64
69
  ],
65
70
  outputs: [
66
71
  { kind: "json", default_path: "lumitrace_recorded.json" },
@@ -9,8 +9,18 @@ module Lumitrace
9
9
  tool: "lumitrace",
10
10
  version: VERSION,
11
11
  json_top_level: {
12
- type: "array",
13
- items: "event"
12
+ type: "object",
13
+ fields: {
14
+ version: { type: "integer", description: "Schema version number." },
15
+ events: { type: "array", items: "event", description: "Traced expression events." },
16
+ coverage: { type: "array", items: "coverage_entry", description: "Per-file coverage summary." }
17
+ }
18
+ },
19
+ coverage_entry_fields: {
20
+ file: { type: "string", required: true, description: "Absolute source path." },
21
+ total_lines: { type: "integer", required: true, description: "Number of traced expression lines." },
22
+ covered_lines: { type: "integer", required: true, description: "Lines with total > 0." },
23
+ coverage_percent: { type: "float", required: true, description: "Covered / total * 100, rounded to 1 decimal." }
14
24
  },
15
25
  event_common_fields: {
16
26
  file: { type: "string", required: true, description: "Absolute source path." },
@@ -20,7 +30,7 @@ module Lumitrace
20
30
  end_col: { type: "integer", required: true },
21
31
  kind: { type: "string", required: true, enum: %w[expr arg] },
22
32
  name: { type: ["string", "null"], required: false, description: "Present for kind=arg." },
23
- total: { type: "integer", required: true, description: "Execution count." },
33
+ total: { type: "integer", required: true, description: "Execution count. 0 means the expression was never executed (uncovered)." },
24
34
  types: {
25
35
  type: "object",
26
36
  required: true,
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Lumitrace
4
- VERSION = "0.6.0"
4
+ VERSION = "0.6.2"
5
5
  end
data/lib/lumitrace.rb CHANGED
@@ -305,6 +305,8 @@ module Lumitrace
305
305
  if allow_help
306
306
  o.separator ""
307
307
  o.on("--help", "Show this help") { opts[:help] = true }
308
+ o.separator ""
309
+ o.separator "For AI/structured help: lumitrace help --format json"
308
310
  end
309
311
  end
310
312
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lumitrace
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.0
4
+ version: 0.6.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Koichi Sasada