aircana 4.0.0.rc1 → 4.0.0.rc2
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 +4 -4
- data/.rspec_status +164 -164
- data/CHANGELOG.md +31 -0
- data/lib/aircana/cli/commands/kb.rb +21 -10
- data/lib/aircana/contexts/confluence_content.rb +44 -1
- data/lib/aircana/generators/skills_generator.rb +69 -1
- data/lib/aircana/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f829f4f8d1e1b56fa8eb2b4ce504ec225ed05d1238c424f77b80587ee5b654f7
|
4
|
+
data.tar.gz: 6d45e7d8b36e1e7dee02c851e81e98dbb05bf90cd0e8c669bd38ddfd1ea77d3a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 968c9c435398b1a186a189d0f45a66042c6b452ee7c9a69c3d25f18c3481bb8d05514413bf10f832f865764dc69a79df4c563faef4d9ee7e4d537c78debb3e02
|
7
|
+
data.tar.gz: 733031e63e262cbd4a41b03657a7ac88efeb08de05a6eaaa40a03a7f30b9c319cdbb6f3cf8c8d95199474bb39fa96aee7998fc74ba3f8d70412079c81bf22872
|
data/.rspec_status
CHANGED
@@ -1,208 +1,208 @@
|
|
1
1
|
example_id | status | run_time |
|
2
2
|
----------------------------------------------------------------- | ------ | --------------- |
|
3
|
-
./spec/aircana/cli/commands/hooks_spec.rb[1:1:1:1] | passed | 0.
|
4
|
-
./spec/aircana/cli/commands/hooks_spec.rb[1:1:2:1:1] | passed | 0.
|
5
|
-
./spec/aircana/cli/commands/hooks_spec.rb[1:1:2:2:1] | passed | 0.
|
6
|
-
./spec/aircana/cli/commands/hooks_spec.rb[1:2:1:1] | passed | 0.
|
7
|
-
./spec/aircana/cli/commands/hooks_spec.rb[1:2:2:1] | passed | 0.
|
8
|
-
./spec/aircana/cli/commands/hooks_spec.rb[1:3:1:1] | passed | 0.
|
9
|
-
./spec/aircana/cli/commands/hooks_spec.rb[1:3:2:1] | passed | 0.
|
10
|
-
./spec/aircana/cli/commands/hooks_spec.rb[1:4:1] | passed | 0.
|
11
|
-
./spec/aircana/cli/commands/hooks_spec.rb[1:4:2:1] | passed | 0.
|
12
|
-
./spec/aircana/cli/commands/hooks_spec.rb[1:5:1:1] | passed | 0.
|
13
|
-
./spec/aircana/cli/commands/hooks_spec.rb[1:5:2:1] | passed | 0.
|
14
|
-
./spec/aircana/cli/commands/hooks_spec.rb[1:5:3:1] | passed | 0.
|
15
|
-
./spec/aircana/cli/commands/hooks_spec.rb[1:5:4:1] | passed | 0.
|
16
|
-
./spec/aircana/cli/commands/hooks_spec.rb[1:6:1:1] | passed | 0.
|
17
|
-
./spec/aircana/cli/commands/hooks_spec.rb[1:6:2:1] | passed | 0.
|
18
|
-
./spec/aircana/cli/commands/hooks_spec.rb[1:7:1] | passed | 0.
|
19
|
-
./spec/aircana/cli/commands/init_spec.rb[1:1:1] | passed | 0.
|
20
|
-
./spec/aircana/cli/commands/init_spec.rb[1:1:2] | passed | 0.
|
21
|
-
./spec/aircana/cli/commands/init_spec.rb[1:2:1:1] | passed | 0.
|
22
|
-
./spec/aircana/cli/commands/init_spec.rb[1:3:1] | passed | 0.
|
23
|
-
./spec/aircana/cli/commands/init_spec.rb[1:3:2:1] | passed | 0.
|
24
|
-
./spec/aircana/cli/commands/init_spec.rb[1:3:3:1] | passed | 0.
|
25
|
-
./spec/aircana/cli/commands/init_spec.rb[1:3:4:1] | passed | 0.
|
26
|
-
./spec/aircana/cli/commands/init_spec.rb[1:4:1] | passed | 0.
|
27
|
-
./spec/aircana/cli/commands/init_spec.rb[1:4:2] | passed | 0.
|
28
|
-
./spec/aircana/cli/commands/init_spec.rb[1:4:3] | passed | 0.
|
29
|
-
./spec/aircana/cli/commands/init_spec.rb[1:4:4] | passed | 0.
|
30
|
-
./spec/aircana/cli/commands/init_spec.rb[1:4:5] | passed | 0.
|
31
|
-
./spec/aircana/cli/commands/init_spec.rb[1:5:1] | passed | 0.
|
32
|
-
./spec/aircana/cli/commands/init_spec.rb[1:5:2] | passed | 0.
|
33
|
-
./spec/aircana/cli/commands/init_spec.rb[1:5:3] | passed | 0.
|
34
|
-
./spec/aircana/cli/commands/init_spec.rb[1:5:4] | passed | 0.
|
35
|
-
./spec/aircana/cli/commands/kb_spec.rb[1:1:1:1] | passed | 0.
|
36
|
-
./spec/aircana/cli/commands/kb_spec.rb[1:1:2:1] | passed | 0.
|
37
|
-
./spec/aircana/cli/commands/kb_spec.rb[1:2:1] | passed | 0.
|
38
|
-
./spec/aircana/cli/commands/kb_spec.rb[1:2:2] | passed | 0.
|
39
|
-
./spec/aircana/cli/commands/kb_spec.rb[1:3:1] | passed | 0.
|
40
|
-
./spec/aircana/cli/commands/kb_spec.rb[1:3:2] | passed | 0.
|
41
|
-
./spec/aircana/cli/commands/kb_spec.rb[1:4:1:1] | passed | 0.
|
42
|
-
./spec/aircana/cli/commands/kb_spec.rb[1:4:2:1] | passed | 0.
|
43
|
-
./spec/aircana/cli/commands/kb_spec.rb[1:5:1:1] | passed | 0.
|
44
|
-
./spec/aircana/cli/commands/kb_spec.rb[1:5:1:2] | passed | 0.
|
45
|
-
./spec/aircana/cli/commands/kb_spec.rb[1:5:2:1] | passed | 0.
|
46
|
-
./spec/aircana/cli/commands/kb_spec.rb[1:5:2:2] | passed | 0.
|
47
|
-
./spec/aircana/cli/commands/kb_spec.rb[1:5:2:3] | passed | 0.
|
3
|
+
./spec/aircana/cli/commands/hooks_spec.rb[1:1:1:1] | passed | 0.00637 seconds |
|
4
|
+
./spec/aircana/cli/commands/hooks_spec.rb[1:1:2:1:1] | passed | 0.00079 seconds |
|
5
|
+
./spec/aircana/cli/commands/hooks_spec.rb[1:1:2:2:1] | passed | 0.00112 seconds |
|
6
|
+
./spec/aircana/cli/commands/hooks_spec.rb[1:2:1:1] | passed | 0.00062 seconds |
|
7
|
+
./spec/aircana/cli/commands/hooks_spec.rb[1:2:2:1] | passed | 0.00068 seconds |
|
8
|
+
./spec/aircana/cli/commands/hooks_spec.rb[1:3:1:1] | passed | 0.00056 seconds |
|
9
|
+
./spec/aircana/cli/commands/hooks_spec.rb[1:3:2:1] | passed | 0.00109 seconds |
|
10
|
+
./spec/aircana/cli/commands/hooks_spec.rb[1:4:1] | passed | 0.00139 seconds |
|
11
|
+
./spec/aircana/cli/commands/hooks_spec.rb[1:4:2:1] | passed | 0.0011 seconds |
|
12
|
+
./spec/aircana/cli/commands/hooks_spec.rb[1:5:1:1] | passed | 0.00056 seconds |
|
13
|
+
./spec/aircana/cli/commands/hooks_spec.rb[1:5:2:1] | passed | 0.00083 seconds |
|
14
|
+
./spec/aircana/cli/commands/hooks_spec.rb[1:5:3:1] | passed | 0.00091 seconds |
|
15
|
+
./spec/aircana/cli/commands/hooks_spec.rb[1:5:4:1] | passed | 0.00073 seconds |
|
16
|
+
./spec/aircana/cli/commands/hooks_spec.rb[1:6:1:1] | passed | 0.00078 seconds |
|
17
|
+
./spec/aircana/cli/commands/hooks_spec.rb[1:6:2:1] | passed | 0.00159 seconds |
|
18
|
+
./spec/aircana/cli/commands/hooks_spec.rb[1:7:1] | passed | 0.00053 seconds |
|
19
|
+
./spec/aircana/cli/commands/init_spec.rb[1:1:1] | passed | 0.00519 seconds |
|
20
|
+
./spec/aircana/cli/commands/init_spec.rb[1:1:2] | passed | 0.00312 seconds |
|
21
|
+
./spec/aircana/cli/commands/init_spec.rb[1:2:1:1] | passed | 0.00411 seconds |
|
22
|
+
./spec/aircana/cli/commands/init_spec.rb[1:3:1] | passed | 0.00256 seconds |
|
23
|
+
./spec/aircana/cli/commands/init_spec.rb[1:3:2:1] | passed | 0.00225 seconds |
|
24
|
+
./spec/aircana/cli/commands/init_spec.rb[1:3:3:1] | passed | 0.00267 seconds |
|
25
|
+
./spec/aircana/cli/commands/init_spec.rb[1:3:4:1] | passed | 0.0028 seconds |
|
26
|
+
./spec/aircana/cli/commands/init_spec.rb[1:4:1] | passed | 0.00159 seconds |
|
27
|
+
./spec/aircana/cli/commands/init_spec.rb[1:4:2] | passed | 0.00141 seconds |
|
28
|
+
./spec/aircana/cli/commands/init_spec.rb[1:4:3] | passed | 0.00128 seconds |
|
29
|
+
./spec/aircana/cli/commands/init_spec.rb[1:4:4] | passed | 0.0013 seconds |
|
30
|
+
./spec/aircana/cli/commands/init_spec.rb[1:4:5] | passed | 0.00131 seconds |
|
31
|
+
./spec/aircana/cli/commands/init_spec.rb[1:5:1] | passed | 0.003 seconds |
|
32
|
+
./spec/aircana/cli/commands/init_spec.rb[1:5:2] | passed | 0.0061 seconds |
|
33
|
+
./spec/aircana/cli/commands/init_spec.rb[1:5:3] | passed | 0.00455 seconds |
|
34
|
+
./spec/aircana/cli/commands/init_spec.rb[1:5:4] | passed | 0.00371 seconds |
|
35
|
+
./spec/aircana/cli/commands/kb_spec.rb[1:1:1:1] | passed | 0.00047 seconds |
|
36
|
+
./spec/aircana/cli/commands/kb_spec.rb[1:1:2:1] | passed | 0.00185 seconds |
|
37
|
+
./spec/aircana/cli/commands/kb_spec.rb[1:2:1] | passed | 0.00111 seconds |
|
38
|
+
./spec/aircana/cli/commands/kb_spec.rb[1:2:2] | passed | 0.0017 seconds |
|
39
|
+
./spec/aircana/cli/commands/kb_spec.rb[1:3:1] | passed | 0.00179 seconds |
|
40
|
+
./spec/aircana/cli/commands/kb_spec.rb[1:3:2] | passed | 0.00133 seconds |
|
41
|
+
./spec/aircana/cli/commands/kb_spec.rb[1:4:1:1] | passed | 0.00029 seconds |
|
42
|
+
./spec/aircana/cli/commands/kb_spec.rb[1:4:2:1] | passed | 0.00145 seconds |
|
43
|
+
./spec/aircana/cli/commands/kb_spec.rb[1:5:1:1] | passed | 0.00071 seconds |
|
44
|
+
./spec/aircana/cli/commands/kb_spec.rb[1:5:1:2] | passed | 0.0002 seconds |
|
45
|
+
./spec/aircana/cli/commands/kb_spec.rb[1:5:2:1] | passed | 0.00021 seconds |
|
46
|
+
./spec/aircana/cli/commands/kb_spec.rb[1:5:2:2] | passed | 0.00089 seconds |
|
47
|
+
./spec/aircana/cli/commands/kb_spec.rb[1:5:2:3] | passed | 0.00094 seconds |
|
48
48
|
./spec/aircana/configuration_spec.rb[1:1:1] | passed | 0.00017 seconds |
|
49
49
|
./spec/aircana/configuration_spec.rb[1:2:1] | passed | 0.00007 seconds |
|
50
50
|
./spec/aircana/configuration_spec.rb[1:3:1] | passed | 0.00007 seconds |
|
51
|
-
./spec/aircana/configuration_spec.rb[1:4:1] | passed | 0.
|
52
|
-
./spec/aircana/configuration_spec.rb[1:5:1] | passed | 0.
|
53
|
-
./spec/aircana/configuration_spec.rb[1:6:1] | passed | 0.
|
54
|
-
./spec/aircana/configuration_spec.rb[1:6:2] | passed | 0.
|
55
|
-
./spec/aircana/configuration_spec.rb[1:7:1:1] | passed | 0.
|
56
|
-
./spec/aircana/configuration_spec.rb[1:7:2:1] | passed | 0.
|
57
|
-
./spec/aircana/configuration_spec.rb[1:7:3:1] | passed | 0.
|
58
|
-
./spec/aircana/configuration_spec.rb[1:7:4:1] | passed | 0.
|
59
|
-
./spec/aircana/contexts/confluence_spec.rb[1:1:1:1] | passed | 0.
|
60
|
-
./spec/aircana/contexts/confluence_spec.rb[1:1:1:2] | passed | 0.
|
61
|
-
./spec/aircana/contexts/confluence_spec.rb[1:1:1:3] | passed | 0.
|
62
|
-
./spec/aircana/contexts/confluence_spec.rb[1:1:2:1] | passed | 0.
|
63
|
-
./spec/aircana/contexts/confluence_spec.rb[1:1:2:2] | passed | 0.
|
64
|
-
./spec/aircana/contexts/confluence_spec.rb[1:1:2:3] | passed | 0.
|
65
|
-
./spec/aircana/contexts/confluence_spec.rb[1:1:3:1] | passed | 0.
|
66
|
-
./spec/aircana/contexts/confluence_spec.rb[1:1:3:2] | passed | 0.
|
67
|
-
./spec/aircana/contexts/local_spec.rb[1:1:1] | passed | 0.
|
68
|
-
./spec/aircana/contexts/local_spec.rb[1:1:2] | passed | 0.
|
69
|
-
./spec/aircana/contexts/local_spec.rb[1:1:3] | passed | 0.
|
70
|
-
./spec/aircana/contexts/local_spec.rb[1:1:4] | passed | 0.
|
71
|
-
./spec/aircana/contexts/local_spec.rb[1:1:5] | passed | 0.
|
72
|
-
./spec/aircana/contexts/local_spec.rb[1:1:6] | passed | 0.
|
51
|
+
./spec/aircana/configuration_spec.rb[1:4:1] | passed | 0.00007 seconds |
|
52
|
+
./spec/aircana/configuration_spec.rb[1:5:1] | passed | 0.00006 seconds |
|
53
|
+
./spec/aircana/configuration_spec.rb[1:6:1] | passed | 0.00007 seconds |
|
54
|
+
./spec/aircana/configuration_spec.rb[1:6:2] | passed | 0.00006 seconds |
|
55
|
+
./spec/aircana/configuration_spec.rb[1:7:1:1] | passed | 0.00023 seconds |
|
56
|
+
./spec/aircana/configuration_spec.rb[1:7:2:1] | passed | 0.00019 seconds |
|
57
|
+
./spec/aircana/configuration_spec.rb[1:7:3:1] | passed | 0.00018 seconds |
|
58
|
+
./spec/aircana/configuration_spec.rb[1:7:4:1] | passed | 0.00008 seconds |
|
59
|
+
./spec/aircana/contexts/confluence_spec.rb[1:1:1:1] | passed | 0.00236 seconds |
|
60
|
+
./spec/aircana/contexts/confluence_spec.rb[1:1:1:2] | passed | 0.00054 seconds |
|
61
|
+
./spec/aircana/contexts/confluence_spec.rb[1:1:1:3] | passed | 0.00113 seconds |
|
62
|
+
./spec/aircana/contexts/confluence_spec.rb[1:1:2:1] | passed | 0.00026 seconds |
|
63
|
+
./spec/aircana/contexts/confluence_spec.rb[1:1:2:2] | passed | 0.0002 seconds |
|
64
|
+
./spec/aircana/contexts/confluence_spec.rb[1:1:2:3] | passed | 0.00019 seconds |
|
65
|
+
./spec/aircana/contexts/confluence_spec.rb[1:1:3:1] | passed | 0.00045 seconds |
|
66
|
+
./spec/aircana/contexts/confluence_spec.rb[1:1:3:2] | passed | 0.00044 seconds |
|
67
|
+
./spec/aircana/contexts/local_spec.rb[1:1:1] | passed | 0.00052 seconds |
|
68
|
+
./spec/aircana/contexts/local_spec.rb[1:1:2] | passed | 0.00034 seconds |
|
69
|
+
./spec/aircana/contexts/local_spec.rb[1:1:3] | passed | 0.00033 seconds |
|
70
|
+
./spec/aircana/contexts/local_spec.rb[1:1:4] | passed | 0.00032 seconds |
|
71
|
+
./spec/aircana/contexts/local_spec.rb[1:1:5] | passed | 0.0003 seconds |
|
72
|
+
./spec/aircana/contexts/local_spec.rb[1:1:6] | passed | 0.00032 seconds |
|
73
73
|
./spec/aircana/contexts/local_spec.rb[1:1:7] | passed | 0.00045 seconds |
|
74
|
-
./spec/aircana/contexts/local_spec.rb[1:1:8] | passed | 0.
|
75
|
-
./spec/aircana/contexts/manifest_spec.rb[1:1:1] | passed | 0.
|
76
|
-
./spec/aircana/contexts/manifest_spec.rb[1:1:2] | passed | 0.
|
77
|
-
./spec/aircana/contexts/manifest_spec.rb[1:1:3] | passed | 0.
|
78
|
-
./spec/aircana/contexts/manifest_spec.rb[1:2:1] | passed | 0.
|
79
|
-
./spec/aircana/contexts/manifest_spec.rb[1:2:2] | passed | 0.
|
80
|
-
./spec/aircana/contexts/manifest_spec.rb[1:3:1] | passed | 0.
|
81
|
-
./spec/aircana/contexts/manifest_spec.rb[1:3:2] | passed | 0.
|
82
|
-
./spec/aircana/contexts/manifest_spec.rb[1:3:3] | passed | 0.
|
83
|
-
./spec/aircana/contexts/manifest_spec.rb[1:3:4] | passed | 0.
|
84
|
-
./spec/aircana/contexts/manifest_spec.rb[1:4:1] | passed | 0.
|
85
|
-
./spec/aircana/contexts/manifest_spec.rb[1:4:2] | passed | 0.
|
86
|
-
./spec/aircana/contexts/manifest_spec.rb[1:5:1] | passed | 0.
|
74
|
+
./spec/aircana/contexts/local_spec.rb[1:1:8] | passed | 0.00058 seconds |
|
75
|
+
./spec/aircana/contexts/manifest_spec.rb[1:1:1] | passed | 0.00342 seconds |
|
76
|
+
./spec/aircana/contexts/manifest_spec.rb[1:1:2] | passed | 0.00107 seconds |
|
77
|
+
./spec/aircana/contexts/manifest_spec.rb[1:1:3] | passed | 0.0012 seconds |
|
78
|
+
./spec/aircana/contexts/manifest_spec.rb[1:2:1] | passed | 0.00122 seconds |
|
79
|
+
./spec/aircana/contexts/manifest_spec.rb[1:2:2] | passed | 0.00109 seconds |
|
80
|
+
./spec/aircana/contexts/manifest_spec.rb[1:3:1] | passed | 0.00096 seconds |
|
81
|
+
./spec/aircana/contexts/manifest_spec.rb[1:3:2] | passed | 0.00022 seconds |
|
82
|
+
./spec/aircana/contexts/manifest_spec.rb[1:3:3] | passed | 0.00109 seconds |
|
83
|
+
./spec/aircana/contexts/manifest_spec.rb[1:3:4] | passed | 0.00089 seconds |
|
84
|
+
./spec/aircana/contexts/manifest_spec.rb[1:4:1] | passed | 0.00114 seconds |
|
85
|
+
./spec/aircana/contexts/manifest_spec.rb[1:4:2] | passed | 0.00021 seconds |
|
86
|
+
./spec/aircana/contexts/manifest_spec.rb[1:5:1] | passed | 0.00083 seconds |
|
87
87
|
./spec/aircana/contexts/manifest_spec.rb[1:5:2] | passed | 0.00022 seconds |
|
88
|
-
./spec/aircana/contexts/manifest_spec.rb[1:6:1] | passed | 0.
|
89
|
-
./spec/aircana/contexts/manifest_spec.rb[1:6:2] | passed | 0.
|
90
|
-
./spec/aircana/contexts/manifest_spec.rb[1:6:3] | passed | 0.
|
88
|
+
./spec/aircana/contexts/manifest_spec.rb[1:6:1] | passed | 0.00022 seconds |
|
89
|
+
./spec/aircana/contexts/manifest_spec.rb[1:6:2] | passed | 0.00021 seconds |
|
90
|
+
./spec/aircana/contexts/manifest_spec.rb[1:6:3] | passed | 0.00018 seconds |
|
91
91
|
./spec/aircana/contexts/manifest_spec.rb[1:6:4] | passed | 0.00019 seconds |
|
92
|
-
./spec/aircana/contexts/manifest_spec.rb[1:6:5] | passed | 0.
|
93
|
-
./spec/aircana/contexts/manifest_spec.rb[1:6:6] | passed | 0.
|
94
|
-
./spec/aircana/contexts/manifest_spec.rb[1:6:7] | passed | 0.
|
95
|
-
./spec/aircana/contexts/manifest_spec.rb[1:6:8] | passed | 0.
|
96
|
-
./spec/aircana/contexts/manifest_spec.rb[1:6:9] | passed | 0.
|
97
|
-
./spec/aircana/contexts/manifest_spec.rb[1:6:10] | passed | 0.
|
98
|
-
./spec/aircana/contexts/manifest_spec.rb[1:6:11] | passed | 0.
|
99
|
-
./spec/aircana/contexts/manifest_spec.rb[1:6:12] | passed | 0.
|
100
|
-
./spec/aircana/contexts/web_spec.rb[1:1:1] | passed | 0.
|
101
|
-
./spec/aircana/contexts/web_spec.rb[1:2:1] | passed | 0.
|
102
|
-
./spec/aircana/contexts/web_spec.rb[1:3:1:1] | passed | 0.
|
103
|
-
./spec/aircana/contexts/web_spec.rb[1:3:1:2] | passed | 0.
|
92
|
+
./spec/aircana/contexts/manifest_spec.rb[1:6:5] | passed | 0.00018 seconds |
|
93
|
+
./spec/aircana/contexts/manifest_spec.rb[1:6:6] | passed | 0.00019 seconds |
|
94
|
+
./spec/aircana/contexts/manifest_spec.rb[1:6:7] | passed | 0.0002 seconds |
|
95
|
+
./spec/aircana/contexts/manifest_spec.rb[1:6:8] | passed | 0.00022 seconds |
|
96
|
+
./spec/aircana/contexts/manifest_spec.rb[1:6:9] | passed | 0.00021 seconds |
|
97
|
+
./spec/aircana/contexts/manifest_spec.rb[1:6:10] | passed | 0.0002 seconds |
|
98
|
+
./spec/aircana/contexts/manifest_spec.rb[1:6:11] | passed | 0.0009 seconds |
|
99
|
+
./spec/aircana/contexts/manifest_spec.rb[1:6:12] | passed | 0.0008 seconds |
|
100
|
+
./spec/aircana/contexts/web_spec.rb[1:1:1] | passed | 0.00032 seconds |
|
101
|
+
./spec/aircana/contexts/web_spec.rb[1:2:1] | passed | 0.00019 seconds |
|
102
|
+
./spec/aircana/contexts/web_spec.rb[1:3:1:1] | passed | 0.00015 seconds |
|
103
|
+
./spec/aircana/contexts/web_spec.rb[1:3:1:2] | passed | 0.00012 seconds |
|
104
104
|
./spec/aircana/contexts/web_spec.rb[1:3:1:3] | passed | 0.00011 seconds |
|
105
|
-
./spec/aircana/contexts/web_spec.rb[1:3:2:1] | passed | 0.
|
106
|
-
./spec/aircana/contexts/web_spec.rb[1:3:2:2] | passed | 0.
|
105
|
+
./spec/aircana/contexts/web_spec.rb[1:3:2:1] | passed | 0.00015 seconds |
|
106
|
+
./spec/aircana/contexts/web_spec.rb[1:3:2:2] | passed | 0.00021 seconds |
|
107
107
|
./spec/aircana/contexts/web_spec.rb[1:3:3:1] | passed | 0.00016 seconds |
|
108
108
|
./spec/aircana/contexts/web_spec.rb[1:3:3:2] | passed | 0.00026 seconds |
|
109
|
-
./spec/aircana/contexts/web_spec.rb[1:3:3:3] | passed | 0.
|
109
|
+
./spec/aircana/contexts/web_spec.rb[1:3:3:3] | passed | 0.00023 seconds |
|
110
110
|
./spec/aircana/contexts/web_spec.rb[1:3:3:4] | passed | 0.00016 seconds |
|
111
|
-
./spec/aircana/contexts/web_spec.rb[1:3:3:5] | passed | 0.
|
112
|
-
./spec/aircana/contexts/web_spec.rb[1:3:4:1] | passed | 0.
|
111
|
+
./spec/aircana/contexts/web_spec.rb[1:3:3:5] | passed | 0.00021 seconds |
|
112
|
+
./spec/aircana/contexts/web_spec.rb[1:3:4:1] | passed | 0.00019 seconds |
|
113
113
|
./spec/aircana/contexts/web_spec.rb[1:3:4:2] | passed | 0.00011 seconds |
|
114
114
|
./spec/aircana/contexts/web_spec.rb[1:3:4:3] | passed | 0.00011 seconds |
|
115
115
|
./spec/aircana/contexts/web_spec.rb[1:3:5:1] | passed | 0.00038 seconds |
|
116
116
|
./spec/aircana/contexts/web_spec.rb[1:3:5:2] | passed | 0.00011 seconds |
|
117
|
-
./spec/aircana/contexts/web_spec.rb[1:3:5:3] | passed | 0.
|
118
|
-
./spec/aircana/contexts/web_spec.rb[1:3:6:1] | passed | 0.
|
119
|
-
./spec/aircana/contexts/web_spec.rb[1:3:6:2] | passed | 0.
|
120
|
-
./spec/aircana/contexts/web_spec.rb[1:3:6:3] | passed | 0.
|
121
|
-
./spec/aircana/contexts/web_spec.rb[1:3:7:1] | passed | 0.
|
117
|
+
./spec/aircana/contexts/web_spec.rb[1:3:5:3] | passed | 0.00028 seconds |
|
118
|
+
./spec/aircana/contexts/web_spec.rb[1:3:6:1] | passed | 0.0003 seconds |
|
119
|
+
./spec/aircana/contexts/web_spec.rb[1:3:6:2] | passed | 0.00021 seconds |
|
120
|
+
./spec/aircana/contexts/web_spec.rb[1:3:6:3] | passed | 0.00023 seconds |
|
121
|
+
./spec/aircana/contexts/web_spec.rb[1:3:7:1] | passed | 0.00012 seconds |
|
122
122
|
./spec/aircana/contexts/web_spec.rb[1:3:7:2] | passed | 0.0001 seconds |
|
123
|
-
./spec/aircana/fzf_helper_spec.rb[1:1:1:1] | passed | 0.
|
123
|
+
./spec/aircana/fzf_helper_spec.rb[1:1:1:1] | passed | 0.00021 seconds |
|
124
124
|
./spec/aircana/fzf_helper_spec.rb[1:1:1:2] | passed | 0.00014 seconds |
|
125
|
-
./spec/aircana/fzf_helper_spec.rb[1:1:1:3] | passed | 0.
|
126
|
-
./spec/aircana/fzf_helper_spec.rb[1:1:2:1] | passed | 0.
|
125
|
+
./spec/aircana/fzf_helper_spec.rb[1:1:1:3] | passed | 0.00017 seconds |
|
126
|
+
./spec/aircana/fzf_helper_spec.rb[1:1:2:1] | passed | 0.00029 seconds |
|
127
127
|
./spec/aircana/fzf_helper_spec.rb[1:1:3:1] | passed | 0.00019 seconds |
|
128
|
-
./spec/aircana/fzf_helper_spec.rb[1:2:1:1] | passed | 0.
|
129
|
-
./spec/aircana/fzf_helper_spec.rb[1:2:1:2] | passed | 0.
|
128
|
+
./spec/aircana/fzf_helper_spec.rb[1:2:1:1] | passed | 0.0001 seconds |
|
129
|
+
./spec/aircana/fzf_helper_spec.rb[1:2:1:2] | passed | 0.00011 seconds |
|
130
130
|
./spec/aircana/fzf_helper_spec.rb[1:2:1:3] | passed | 0.0001 seconds |
|
131
131
|
./spec/aircana/fzf_helper_spec.rb[1:2:2:1] | passed | 0.0001 seconds |
|
132
132
|
./spec/aircana/fzf_helper_spec.rb[1:2:2:2] | passed | 0.00008 seconds |
|
133
133
|
./spec/aircana/generators/hooks_generator_spec.rb[1:1:1] | passed | 0.00003 seconds |
|
134
|
-
./spec/aircana/generators/hooks_generator_spec.rb[1:2:1] | passed | 0.
|
134
|
+
./spec/aircana/generators/hooks_generator_spec.rb[1:2:1] | passed | 0.00002 seconds |
|
135
135
|
./spec/aircana/generators/hooks_generator_spec.rb[1:3:1] | passed | 0.00035 seconds |
|
136
|
-
./spec/aircana/generators/hooks_generator_spec.rb[1:3:2] | passed | 0.
|
137
|
-
./spec/aircana/generators/hooks_generator_spec.rb[1:4:1] | passed | 0.
|
136
|
+
./spec/aircana/generators/hooks_generator_spec.rb[1:3:2] | passed | 0.0002 seconds |
|
137
|
+
./spec/aircana/generators/hooks_generator_spec.rb[1:4:1] | passed | 0.0001 seconds |
|
138
138
|
./spec/aircana/generators/hooks_generator_spec.rb[1:5:1:1] | passed | 0.00009 seconds |
|
139
139
|
./spec/aircana/generators/hooks_generator_spec.rb[1:5:2:1] | passed | 0.00003 seconds |
|
140
|
-
./spec/aircana/generators/hooks_generator_spec.rb[1:6:1] | passed | 0.
|
141
|
-
./spec/aircana/generators/hooks_generator_spec.rb[1:7:1] | passed | 0.
|
142
|
-
./spec/aircana/generators/plan_command_generator_spec.rb[1:1:1] | passed | 0.
|
143
|
-
./spec/aircana/generators/plan_command_generator_spec.rb[1:1:2] | passed | 0.
|
144
|
-
./spec/aircana/generators/plan_command_generator_spec.rb[1:1:3] | passed | 0.
|
140
|
+
./spec/aircana/generators/hooks_generator_spec.rb[1:6:1] | passed | 0.00059 seconds |
|
141
|
+
./spec/aircana/generators/hooks_generator_spec.rb[1:7:1] | passed | 0.00014 seconds |
|
142
|
+
./spec/aircana/generators/plan_command_generator_spec.rb[1:1:1] | passed | 0.00032 seconds |
|
143
|
+
./spec/aircana/generators/plan_command_generator_spec.rb[1:1:2] | passed | 0.00025 seconds |
|
144
|
+
./spec/aircana/generators/plan_command_generator_spec.rb[1:1:3] | passed | 0.00025 seconds |
|
145
145
|
./spec/aircana/generators/plan_command_generator_spec.rb[1:2:1] | passed | 0.00009 seconds |
|
146
146
|
./spec/aircana/generators/plan_command_generator_spec.rb[1:2:2] | passed | 0.00007 seconds |
|
147
|
-
./spec/aircana/generators/record_command_generator_spec.rb[1:1:1] | passed | 0.
|
148
|
-
./spec/aircana/generators/record_command_generator_spec.rb[1:2:1] | passed | 0.
|
149
|
-
./spec/aircana/generators/record_command_generator_spec.rb[1:2:2] | passed | 0.
|
150
|
-
./spec/aircana/generators/skills_generator_spec.rb[1:1:1] | passed | 0.
|
151
|
-
./spec/aircana/generators/skills_generator_spec.rb[1:1:2] | passed | 0.
|
152
|
-
./spec/aircana/generators/skills_generator_spec.rb[1:1:3] | passed | 0.
|
153
|
-
./spec/aircana/generators/skills_generator_spec.rb[1:2:1] | passed | 0.
|
154
|
-
./spec/aircana/generators/skills_generator_spec.rb[1:2:2] | passed | 0.
|
147
|
+
./spec/aircana/generators/record_command_generator_spec.rb[1:1:1] | passed | 0.0002 seconds |
|
148
|
+
./spec/aircana/generators/record_command_generator_spec.rb[1:2:1] | passed | 0.00048 seconds |
|
149
|
+
./spec/aircana/generators/record_command_generator_spec.rb[1:2:2] | passed | 0.00009 seconds |
|
150
|
+
./spec/aircana/generators/skills_generator_spec.rb[1:1:1] | passed | 0.00034 seconds |
|
151
|
+
./spec/aircana/generators/skills_generator_spec.rb[1:1:2] | passed | 0.0002 seconds |
|
152
|
+
./spec/aircana/generators/skills_generator_spec.rb[1:1:3] | passed | 0.00019 seconds |
|
153
|
+
./spec/aircana/generators/skills_generator_spec.rb[1:2:1] | passed | 0.00029 seconds |
|
154
|
+
./spec/aircana/generators/skills_generator_spec.rb[1:2:2] | passed | 0.0003 seconds |
|
155
155
|
./spec/aircana/generators/skills_generator_spec.rb[1:2:3] | passed | 0.00027 seconds |
|
156
|
-
./spec/aircana/generators/skills_generator_spec.rb[1:3:1] | passed | 0.
|
157
|
-
./spec/aircana/generators/skills_generator_spec.rb[1:3:2] | passed | 0.
|
158
|
-
./spec/aircana/generators/skills_generator_spec.rb[1:3:3] | passed | 0.
|
159
|
-
./spec/aircana/generators/skills_generator_spec.rb[1:3:4] | passed | 0.
|
160
|
-
./spec/aircana/generators/skills_generator_spec.rb[1:3:5] | passed | 0.
|
161
|
-
./spec/aircana/generators/skills_generator_spec.rb[1:4:1] | passed | 0.
|
162
|
-
./spec/aircana/generators/skills_generator_spec.rb[1:4:2] | passed | 0.
|
163
|
-
./spec/aircana/generators/skills_generator_spec.rb[1:4:3] | passed | 0.
|
156
|
+
./spec/aircana/generators/skills_generator_spec.rb[1:3:1] | passed | 0.00021 seconds |
|
157
|
+
./spec/aircana/generators/skills_generator_spec.rb[1:3:2] | passed | 0.00025 seconds |
|
158
|
+
./spec/aircana/generators/skills_generator_spec.rb[1:3:3] | passed | 0.00019 seconds |
|
159
|
+
./spec/aircana/generators/skills_generator_spec.rb[1:3:4] | passed | 0.00017 seconds |
|
160
|
+
./spec/aircana/generators/skills_generator_spec.rb[1:3:5] | passed | 0.00018 seconds |
|
161
|
+
./spec/aircana/generators/skills_generator_spec.rb[1:4:1] | passed | 0.00018 seconds |
|
162
|
+
./spec/aircana/generators/skills_generator_spec.rb[1:4:2] | passed | 0.00016 seconds |
|
163
|
+
./spec/aircana/generators/skills_generator_spec.rb[1:4:3] | passed | 0.00025 seconds |
|
164
164
|
./spec/aircana/generators/skills_generator_spec.rb[1:5:1] | passed | 0.00021 seconds |
|
165
|
-
./spec/aircana/generators/skills_generator_spec.rb[1:6:1] | passed | 0.
|
166
|
-
./spec/aircana/generators/skills_generator_spec.rb[1:6:2] | passed | 0.
|
167
|
-
./spec/aircana/generators/skills_generator_spec.rb[1:6:3] | passed | 0.
|
168
|
-
./spec/aircana/generators/skills_generator_spec.rb[1:6:4] | passed | 0.
|
169
|
-
./spec/aircana/generators/skills_generator_spec.rb[1:6:5] | passed | 0.
|
170
|
-
./spec/aircana/generators/skills_generator_spec.rb[1:6:6] | passed | 0.
|
171
|
-
./spec/aircana/generators/skills_generator_spec.rb[1:6:7] | passed | 0.
|
172
|
-
./spec/aircana/generators/skills_generator_spec.rb[1:7:1] | passed | 0.
|
173
|
-
./spec/aircana/generators/skills_generator_spec.rb[1:7:2] | passed | 0.
|
174
|
-
./spec/aircana/human_logger_spec.rb[1:1:1] | passed | 0.
|
165
|
+
./spec/aircana/generators/skills_generator_spec.rb[1:6:1] | passed | 0.0002 seconds |
|
166
|
+
./spec/aircana/generators/skills_generator_spec.rb[1:6:2] | passed | 0.00019 seconds |
|
167
|
+
./spec/aircana/generators/skills_generator_spec.rb[1:6:3] | passed | 0.00026 seconds |
|
168
|
+
./spec/aircana/generators/skills_generator_spec.rb[1:6:4] | passed | 0.00022 seconds |
|
169
|
+
./spec/aircana/generators/skills_generator_spec.rb[1:6:5] | passed | 0.00021 seconds |
|
170
|
+
./spec/aircana/generators/skills_generator_spec.rb[1:6:6] | passed | 0.0002 seconds |
|
171
|
+
./spec/aircana/generators/skills_generator_spec.rb[1:6:7] | passed | 0.00019 seconds |
|
172
|
+
./spec/aircana/generators/skills_generator_spec.rb[1:7:1] | passed | 0.00328 seconds |
|
173
|
+
./spec/aircana/generators/skills_generator_spec.rb[1:7:2] | passed | 0.00115 seconds |
|
174
|
+
./spec/aircana/human_logger_spec.rb[1:1:1] | passed | 0.00006 seconds |
|
175
175
|
./spec/aircana/human_logger_spec.rb[1:2:1] | passed | 0.00004 seconds |
|
176
176
|
./spec/aircana/human_logger_spec.rb[1:3:1] | passed | 0.00004 seconds |
|
177
177
|
./spec/aircana/human_logger_spec.rb[1:4:1] | passed | 0.00004 seconds |
|
178
178
|
./spec/aircana/human_logger_spec.rb[1:5:1] | passed | 0.00003 seconds |
|
179
|
-
./spec/aircana/human_logger_spec.rb[1:5:2] | passed | 0.
|
179
|
+
./spec/aircana/human_logger_spec.rb[1:5:2] | passed | 0.00004 seconds |
|
180
180
|
./spec/aircana/human_logger_spec.rb[1:5:3] | passed | 0.00003 seconds |
|
181
181
|
./spec/aircana/human_logger_spec.rb[1:5:4] | passed | 0.00003 seconds |
|
182
182
|
./spec/aircana/human_logger_spec.rb[1:5:5] | passed | 0.00003 seconds |
|
183
183
|
./spec/aircana/human_logger_spec.rb[1:5:6] | passed | 0.00003 seconds |
|
184
184
|
./spec/aircana/human_logger_spec.rb[1:5:7] | passed | 0.00003 seconds |
|
185
|
-
./spec/aircana/human_logger_spec.rb[1:6:1] | passed | 0.
|
186
|
-
./spec/aircana/llm/claude_client_spec.rb[1:1:1:1] | passed | 0.
|
187
|
-
./spec/aircana/llm/claude_client_spec.rb[1:1:1:2] | passed | 0.
|
185
|
+
./spec/aircana/human_logger_spec.rb[1:6:1] | passed | 0.00027 seconds |
|
186
|
+
./spec/aircana/llm/claude_client_spec.rb[1:1:1:1] | passed | 0.00045 seconds |
|
187
|
+
./spec/aircana/llm/claude_client_spec.rb[1:1:1:2] | passed | 0.00033 seconds |
|
188
188
|
./spec/aircana/llm/claude_client_spec.rb[1:1:1:3] | passed | 0.00028 seconds |
|
189
|
-
./spec/aircana/llm/claude_client_spec.rb[1:1:1:4] | passed | 0.
|
190
|
-
./spec/aircana/llm/claude_client_spec.rb[1:1:2:1] | passed | 0.
|
189
|
+
./spec/aircana/llm/claude_client_spec.rb[1:1:1:4] | passed | 0.00044 seconds |
|
190
|
+
./spec/aircana/llm/claude_client_spec.rb[1:1:2:1] | passed | 0.00034 seconds |
|
191
191
|
./spec/aircana/llm/claude_client_spec.rb[1:1:2:2] | passed | 0.00028 seconds |
|
192
|
-
./spec/aircana/llm/claude_client_spec.rb[1:1:3:1] | passed | 0.
|
193
|
-
./spec/aircana/llm/claude_client_spec.rb[1:2:1] | passed | 0.
|
192
|
+
./spec/aircana/llm/claude_client_spec.rb[1:1:3:1] | passed | 0.00041 seconds |
|
193
|
+
./spec/aircana/llm/claude_client_spec.rb[1:2:1] | passed | 0.00029 seconds |
|
194
194
|
./spec/aircana/llm/claude_client_spec.rb[1:2:2] | passed | 0.00028 seconds |
|
195
|
-
./spec/aircana/llm/claude_client_spec.rb[1:3:1:1] | passed | 0.
|
195
|
+
./spec/aircana/llm/claude_client_spec.rb[1:3:1:1] | passed | 0.0002 seconds |
|
196
196
|
./spec/aircana/llm/claude_client_spec.rb[1:3:1:2] | passed | 0.00019 seconds |
|
197
|
-
./spec/aircana/system_checker_spec.rb[1:1:1:1] | passed | 0.
|
198
|
-
./spec/aircana/system_checker_spec.rb[1:1:2:1] | passed | 0.
|
199
|
-
./spec/aircana/system_checker_spec.rb[1:1:3:1] | passed | 0.
|
200
|
-
./spec/aircana/system_checker_spec.rb[1:2:1] | passed | 0.
|
197
|
+
./spec/aircana/system_checker_spec.rb[1:1:1:1] | passed | 0.00026 seconds |
|
198
|
+
./spec/aircana/system_checker_spec.rb[1:1:2:1] | passed | 0.00036 seconds |
|
199
|
+
./spec/aircana/system_checker_spec.rb[1:1:3:1] | passed | 0.0006 seconds |
|
200
|
+
./spec/aircana/system_checker_spec.rb[1:2:1] | passed | 0.00025 seconds |
|
201
201
|
./spec/aircana/system_checker_spec.rb[1:2:2] | passed | 0.00019 seconds |
|
202
|
-
./spec/aircana/system_checker_spec.rb[1:3:1] | passed | 0.
|
203
|
-
./spec/aircana/system_checker_spec.rb[1:3:2] | passed | 0.
|
204
|
-
./spec/aircana/system_checker_spec.rb[1:3:3] | passed | 0.
|
205
|
-
./spec/aircana/system_checker_spec.rb[1:3:4] | passed | 0.
|
206
|
-
./spec/aircana/system_checker_spec.rb[1:3:5] | passed | 0.
|
207
|
-
./spec/aircana_spec.rb[1:1] | passed | 0.
|
208
|
-
./spec/aircana_spec.rb[1:2] | passed | 0.
|
202
|
+
./spec/aircana/system_checker_spec.rb[1:3:1] | passed | 0.00019 seconds |
|
203
|
+
./spec/aircana/system_checker_spec.rb[1:3:2] | passed | 0.00019 seconds |
|
204
|
+
./spec/aircana/system_checker_spec.rb[1:3:3] | passed | 0.00021 seconds |
|
205
|
+
./spec/aircana/system_checker_spec.rb[1:3:4] | passed | 0.00026 seconds |
|
206
|
+
./spec/aircana/system_checker_spec.rb[1:3:5] | passed | 0.00016 seconds |
|
207
|
+
./spec/aircana_spec.rb[1:1] | passed | 0.00003 seconds |
|
208
|
+
./spec/aircana_spec.rb[1:2] | passed | 0.0006 seconds |
|
data/CHANGELOG.md
CHANGED
@@ -7,6 +7,37 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
7
7
|
|
8
8
|
## [Unreleased]
|
9
9
|
|
10
|
+
## [4.0.0.rc2] - 2025-10-17
|
11
|
+
|
12
|
+
### Fixed
|
13
|
+
- **KB Creation UX**: Improved knowledge base name prompt to guide users naturally
|
14
|
+
- Changed prompt from "Knowledge base name:" to "What topic should this knowledge base cover?"
|
15
|
+
- Added example default: "e.g., 'Canvas Backend Database', 'API Design'"
|
16
|
+
- Prevents duplicate "Learn" prefix in generated skill names
|
17
|
+
- **SKILL.md Generation**: Fixed empty knowledge file references in SKILL.md
|
18
|
+
- Reordered operations to generate SKILL.md after content is fetched
|
19
|
+
- Modified prompt functions to return success status
|
20
|
+
- SKILL.md now only generated as fallback if no content fetched
|
21
|
+
- **Confluence Content Processing**: Added comprehensive Confluence macro preprocessing
|
22
|
+
- Removes empty code blocks from Confluence API responses
|
23
|
+
- Converts panel macros to blockquotes
|
24
|
+
- Converts info/note/warning macros to formatted blockquotes with emoji indicators
|
25
|
+
- Strips all Confluence-specific XML tags while preserving content
|
26
|
+
- Fixes bug where code examples were missing from knowledge base
|
27
|
+
- **Filename Strategy**: Fixed mismatch between stored filenames and manifest references
|
28
|
+
- Primary method now scans actual markdown files on disk
|
29
|
+
- Matches disk files to manifest summaries
|
30
|
+
- Fallback extracts from manifest metadata for tests/initial generation
|
31
|
+
- SKILL.md now correctly references existing knowledge files
|
32
|
+
- **Empty Knowledge Base Warning**: Added helpful warning when generating SKILL.md with no content
|
33
|
+
- Warns user that SKILL.md will be empty
|
34
|
+
- Suggests running `aircana kb refresh <kb-name>` to fetch knowledge
|
35
|
+
|
36
|
+
### Technical
|
37
|
+
- All tests passing (206 examples, 0 failures)
|
38
|
+
- Rubocop clean with justified disable directives for regex line lengths
|
39
|
+
- Backward compatible with existing tests and behavior
|
40
|
+
|
10
41
|
## [4.0.0.rc1] - 2025-10-17
|
11
42
|
|
12
43
|
### Changed
|
@@ -29,7 +29,8 @@ module Aircana
|
|
29
29
|
def create # rubocop:disable Metrics/MethodLength
|
30
30
|
prompt = TTY::Prompt.new
|
31
31
|
|
32
|
-
kb_name = prompt.ask("
|
32
|
+
kb_name = prompt.ask("What topic should this knowledge base cover?",
|
33
|
+
default: "e.g., 'Canvas Backend Database', 'API Design'")
|
33
34
|
short_description = prompt.ask("Briefly describe what this KB contains:")
|
34
35
|
|
35
36
|
# Prompt for knowledge base type
|
@@ -48,13 +49,14 @@ module Aircana
|
|
48
49
|
normalized_kb_name = normalize_string(kb_name)
|
49
50
|
|
50
51
|
# Prompt for knowledge fetching
|
51
|
-
prompt_for_knowledge_fetch(prompt, normalized_kb_name, kb_type, short_description)
|
52
|
+
fetched_confluence = prompt_for_knowledge_fetch(prompt, normalized_kb_name, kb_type, short_description)
|
52
53
|
|
53
54
|
# Prompt for web URL fetching
|
54
|
-
prompt_for_url_fetch(prompt, normalized_kb_name, kb_type)
|
55
|
+
fetched_urls = prompt_for_url_fetch(prompt, normalized_kb_name, kb_type)
|
55
56
|
|
56
|
-
# Generate SKILL.md
|
57
|
-
|
57
|
+
# Generate SKILL.md if no content was fetched during the prompts
|
58
|
+
# (the prompt functions already generate it when they successfully fetch content)
|
59
|
+
regenerate_skill_md(normalized_kb_name, short_description) unless fetched_confluence || fetched_urls
|
58
60
|
|
59
61
|
# If remote kb_type, ensure SessionStart hook is installed
|
60
62
|
ensure_remote_knowledge_refresh_hook if kb_type == "remote"
|
@@ -326,7 +328,7 @@ module Aircana
|
|
326
328
|
# rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/MethodLength
|
327
329
|
# rubocop:disable Metrics/PerceivedComplexity
|
328
330
|
def prompt_for_knowledge_fetch(prompt, normalized_kb_name, kb_type, short_description)
|
329
|
-
return unless confluence_configured?
|
331
|
+
return false unless confluence_configured?
|
330
332
|
|
331
333
|
if prompt.yes?("Would you like to fetch knowledge for this KB from Confluence now?")
|
332
334
|
Aircana.human_logger.info "Fetching knowledge from Confluence..."
|
@@ -340,8 +342,11 @@ module Aircana
|
|
340
342
|
end
|
341
343
|
|
342
344
|
result = perform_refresh(normalized_kb_name, kb_type, label: label)
|
343
|
-
|
344
|
-
|
345
|
+
if result[:pages_count]&.positive?
|
346
|
+
ensure_gitignore_entry(kb_type)
|
347
|
+
regenerate_skill_md(normalized_kb_name, short_description)
|
348
|
+
return true
|
349
|
+
end
|
345
350
|
else
|
346
351
|
refresh_message = if kb_type == "local"
|
347
352
|
"fetch knowledge"
|
@@ -352,6 +357,8 @@ module Aircana
|
|
352
357
|
"Skipping knowledge fetch. You can #{refresh_message} later."
|
353
358
|
)
|
354
359
|
end
|
360
|
+
|
361
|
+
false
|
355
362
|
rescue Aircana::Error => e
|
356
363
|
Aircana.human_logger.warn "Failed to fetch knowledge: #{e.message}"
|
357
364
|
refresh_message = if kb_type == "local"
|
@@ -360,6 +367,7 @@ module Aircana
|
|
360
367
|
"try again later with 'aircana kb refresh #{normalized_kb_name}'"
|
361
368
|
end
|
362
369
|
Aircana.human_logger.info "You can #{refresh_message}"
|
370
|
+
false
|
363
371
|
end
|
364
372
|
# rubocop:enable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/MethodLength
|
365
373
|
# rubocop:enable Metrics/PerceivedComplexity
|
@@ -367,7 +375,7 @@ module Aircana
|
|
367
375
|
# rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/MethodLength
|
368
376
|
# rubocop:disable Metrics/PerceivedComplexity
|
369
377
|
def prompt_for_url_fetch(prompt, normalized_kb_name, kb_type)
|
370
|
-
return unless prompt.yes?("Would you like to add web URLs for this KB's knowledge base?")
|
378
|
+
return false unless prompt.yes?("Would you like to add web URLs for this KB's knowledge base?")
|
371
379
|
|
372
380
|
urls = []
|
373
381
|
loop do
|
@@ -382,7 +390,7 @@ module Aircana
|
|
382
390
|
end
|
383
391
|
end
|
384
392
|
|
385
|
-
return if urls.empty?
|
393
|
+
return false if urls.empty?
|
386
394
|
|
387
395
|
begin
|
388
396
|
Aircana.human_logger.info "Fetching #{urls.size} URL(s)..."
|
@@ -393,6 +401,7 @@ module Aircana
|
|
393
401
|
Aircana.human_logger.success "Successfully fetched #{result[:pages_count]} URL(s)"
|
394
402
|
ensure_gitignore_entry(kb_type)
|
395
403
|
regenerate_skill_md(normalized_kb_name)
|
404
|
+
return true
|
396
405
|
else
|
397
406
|
Aircana.human_logger.warn "No URLs were successfully fetched"
|
398
407
|
end
|
@@ -402,6 +411,8 @@ module Aircana
|
|
402
411
|
"You can add URLs later with 'aircana kb add-url #{normalized_kb_name} <URL>'"
|
403
412
|
)
|
404
413
|
end
|
414
|
+
|
415
|
+
false
|
405
416
|
end
|
406
417
|
# rubocop:enable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/MethodLength
|
407
418
|
# rubocop:enable Metrics/PerceivedComplexity
|
@@ -14,9 +14,52 @@ module Aircana
|
|
14
14
|
def convert_to_markdown(html_content)
|
15
15
|
return "" if html_content.nil? || html_content.empty?
|
16
16
|
|
17
|
-
|
17
|
+
# Preprocess Confluence macros before converting to Markdown
|
18
|
+
cleaned_html = preprocess_confluence_macros(html_content)
|
19
|
+
ReverseMarkdown.convert(cleaned_html, github_flavored: true)
|
18
20
|
end
|
19
21
|
|
22
|
+
# rubocop:disable Layout/LineLength, Metrics/MethodLength
|
23
|
+
def preprocess_confluence_macros(html)
|
24
|
+
# Process Confluence structured macros to make them compatible with Markdown conversion
|
25
|
+
cleaned = html.dup
|
26
|
+
|
27
|
+
# Remove empty code blocks (common issue with Confluence API)
|
28
|
+
cleaned.gsub!(
|
29
|
+
%r{<ac:structured-macro[^>]*ac:name="code"[^>]*>.*?<ac:plain-text-body>\s*</ac:plain-text-body>.*?</ac:structured-macro>}m, ""
|
30
|
+
)
|
31
|
+
|
32
|
+
# Convert panel macros to blockquotes, preserving inner content
|
33
|
+
cleaned.gsub!(
|
34
|
+
%r{<ac:structured-macro[^>]*ac:name="panel"[^>]*>.*?<ac:rich-text-body>(.*?)</ac:rich-text-body>.*?</ac:structured-macro>}m, '<blockquote>\1</blockquote>'
|
35
|
+
)
|
36
|
+
|
37
|
+
# Convert info/note/warning macros to blockquotes with indicators
|
38
|
+
cleaned.gsub!(
|
39
|
+
%r{<ac:structured-macro[^>]*ac:name="info"[^>]*>.*?<ac:rich-text-body>(.*?)</ac:rich-text-body>.*?</ac:structured-macro>}m, '<blockquote><strong>ℹ️ Info:</strong> \1</blockquote>'
|
40
|
+
)
|
41
|
+
cleaned.gsub!(
|
42
|
+
%r{<ac:structured-macro[^>]*ac:name="note"[^>]*>.*?<ac:rich-text-body>(.*?)</ac:rich-text-body>.*?</ac:structured-macro>}m, '<blockquote><strong>📝 Note:</strong> \1</blockquote>'
|
43
|
+
)
|
44
|
+
cleaned.gsub!(
|
45
|
+
%r{<ac:structured-macro[^>]*ac:name="warning"[^>]*>.*?<ac:rich-text-body>(.*?)</ac:rich-text-body>.*?</ac:structured-macro>}m, '<blockquote><strong>⚠️ Warning:</strong> \1</blockquote>'
|
46
|
+
)
|
47
|
+
|
48
|
+
# Strip other structured macros but preserve rich text body content
|
49
|
+
cleaned.gsub!(
|
50
|
+
%r{<ac:structured-macro[^>]*>.*?<ac:rich-text-body>(.*?)</ac:rich-text-body>.*?</ac:structured-macro>}m, '\1'
|
51
|
+
)
|
52
|
+
|
53
|
+
# Remove any remaining Confluence-specific tags
|
54
|
+
cleaned.gsub!(%r{</?ac:[^>]*>}m, "")
|
55
|
+
|
56
|
+
# Clean up Confluence parameter tags
|
57
|
+
cleaned.gsub!(%r{<ac:parameter[^>]*>.*?</ac:parameter>}m, "")
|
58
|
+
|
59
|
+
cleaned
|
60
|
+
end
|
61
|
+
# rubocop:enable Layout/LineLength, Metrics/MethodLength
|
62
|
+
|
20
63
|
def log_pages_found(count, kb_name)
|
21
64
|
Aircana.human_logger.info "Found #{count} pages for KB '#{kb_name}'"
|
22
65
|
end
|
@@ -5,6 +5,7 @@ require_relative "../contexts/manifest"
|
|
5
5
|
|
6
6
|
module Aircana
|
7
7
|
module Generators
|
8
|
+
# rubocop:disable Metrics/ClassLength
|
8
9
|
class SkillsGenerator < BaseGenerator
|
9
10
|
attr_reader :kb_name, :short_description, :skill_description, :knowledge_files
|
10
11
|
|
@@ -24,11 +25,20 @@ module Aircana
|
|
24
25
|
# rubocop:enable Metrics/ParameterLists
|
25
26
|
|
26
27
|
# Generate SKILL.md based on manifest data
|
28
|
+
# rubocop:disable Metrics/MethodLength
|
27
29
|
def self.from_manifest(kb_name)
|
28
30
|
manifest = Contexts::Manifest.read_manifest(kb_name)
|
29
31
|
raise Error, "No manifest found for knowledge base '#{kb_name}'" unless manifest
|
30
32
|
|
31
33
|
knowledge_files = extract_knowledge_files_from_manifest(manifest)
|
34
|
+
|
35
|
+
# Warn if no knowledge files were found
|
36
|
+
if knowledge_files.empty?
|
37
|
+
Aircana.human_logger.warn "No knowledge files found for KB '#{kb_name}'. " \
|
38
|
+
"SKILL.md will be generated but will be empty. " \
|
39
|
+
"Run 'aircana kb refresh #{kb_name}' to fetch knowledge."
|
40
|
+
end
|
41
|
+
|
32
42
|
skill_description = generate_skill_description_from_manifest(manifest, kb_name)
|
33
43
|
|
34
44
|
new(
|
@@ -37,11 +47,45 @@ module Aircana
|
|
37
47
|
knowledge_files: knowledge_files
|
38
48
|
)
|
39
49
|
end
|
50
|
+
# rubocop:enable Metrics/MethodLength
|
40
51
|
|
41
52
|
# Class methods for manifest processing
|
53
|
+
def self.extract_knowledge_files_from_manifest(manifest)
|
54
|
+
kb_name = manifest["name"]
|
55
|
+
|
56
|
+
# If kb_dir exists, scan actual files on disk (preferred method)
|
57
|
+
if kb_name && Aircana.configuration.kb_knowledge_dir
|
58
|
+
kb_dir = Aircana.configuration.kb_path(kb_name)
|
59
|
+
|
60
|
+
return extract_files_from_disk(manifest, kb_dir) if Dir.exist?(kb_dir)
|
61
|
+
end
|
62
|
+
|
63
|
+
# Fallback: extract from manifest metadata (for tests or before files are created)
|
64
|
+
extract_files_from_manifest_metadata(manifest)
|
65
|
+
end
|
66
|
+
|
67
|
+
# rubocop:disable Metrics/MethodLength
|
68
|
+
def self.extract_files_from_disk(manifest, kb_dir)
|
69
|
+
actual_files = Dir.glob(File.join(kb_dir, "*.md"))
|
70
|
+
.reject { |f| File.basename(f) == "SKILL.md" }
|
71
|
+
.sort
|
72
|
+
|
73
|
+
# Build file list with summaries from manifest
|
74
|
+
actual_files.map do |filepath|
|
75
|
+
filename = File.basename(filepath)
|
76
|
+
summary = find_summary_for_file(manifest, filename)
|
77
|
+
|
78
|
+
{
|
79
|
+
summary: summary || File.basename(filename, ".md").tr("-", " ").capitalize,
|
80
|
+
filename: filename
|
81
|
+
}
|
82
|
+
end
|
83
|
+
end
|
84
|
+
# rubocop:enable Metrics/MethodLength
|
85
|
+
|
42
86
|
# rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/MethodLength
|
43
87
|
# rubocop:disable Metrics/PerceivedComplexity
|
44
|
-
def self.
|
88
|
+
def self.extract_files_from_manifest_metadata(manifest)
|
45
89
|
files = []
|
46
90
|
|
47
91
|
manifest["sources"]&.each do |source|
|
@@ -68,6 +112,29 @@ module Aircana
|
|
68
112
|
# rubocop:enable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/MethodLength
|
69
113
|
# rubocop:enable Metrics/PerceivedComplexity
|
70
114
|
|
115
|
+
# Find the summary for a given filename from the manifest
|
116
|
+
# rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/MethodLength
|
117
|
+
# rubocop:disable Metrics/PerceivedComplexity
|
118
|
+
def self.find_summary_for_file(manifest, filename)
|
119
|
+
manifest["sources"]&.each do |source|
|
120
|
+
case source["type"]
|
121
|
+
when "confluence"
|
122
|
+
source["pages"]&.each do |page|
|
123
|
+
return page["summary"] if filename.include?(page["id"])
|
124
|
+
end
|
125
|
+
when "web"
|
126
|
+
source["urls"]&.each do |url_entry|
|
127
|
+
sanitized_url_part = sanitize_filename_from_url(url_entry["url"])
|
128
|
+
return url_entry["summary"] if filename.include?(sanitized_url_part)
|
129
|
+
end
|
130
|
+
end
|
131
|
+
end
|
132
|
+
|
133
|
+
nil
|
134
|
+
end
|
135
|
+
# rubocop:enable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/MethodLength
|
136
|
+
# rubocop:enable Metrics/PerceivedComplexity
|
137
|
+
|
71
138
|
def self.generate_skill_description_from_manifest(manifest, kb_name)
|
72
139
|
# Generate a description optimized for Claude's skill discovery
|
73
140
|
source_count = manifest["sources"]&.size || 0
|
@@ -91,6 +158,7 @@ module Aircana
|
|
91
158
|
rescue URI::InvalidURIError
|
92
159
|
"web_resource"
|
93
160
|
end
|
161
|
+
# rubocop:enable Metrics/ClassLength
|
94
162
|
|
95
163
|
protected
|
96
164
|
|
data/lib/aircana/version.rb
CHANGED