aircana 4.0.0.rc3 → 4.0.0.rc5
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 +187 -187
- data/CLAUDE.md +30 -23
- data/lib/aircana/cli/commands/init.rb +14 -7
- data/lib/aircana/cli/commands/kb.rb +15 -13
- data/lib/aircana/configuration.rb +12 -1
- data/lib/aircana/contexts/confluence.rb +3 -1
- data/lib/aircana/contexts/manifest.rb +2 -0
- data/lib/aircana/generators/skills_generator.rb +21 -0
- 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: b76d8d7f4a2ba1848e3eb413dff18b86fbd4010d3c8687a9ea1b28f26440b6f2
|
|
4
|
+
data.tar.gz: 123c326d352a7fcc5bc45f440633477ac01ac5a12c0d0d33dd42bfd589290e7a
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: b90dc3e9d898eb4819fdb057f8f33a2934e261d4507915682f8aeabd60d9b0c7db029f8e865b0a085e46597c86866d4e5defc48ccb54161f2c06ea7d1a56974b
|
|
7
|
+
data.tar.gz: b4970c020cbaa9d0af571f5d49d55193d5cf2d10e5e6fa9ae79fe7595d3f467aad37b23ea75180281ff9159cf57d1ad0ad8ba7723366d9b99f2b756b76224b0a
|
data/.rspec_status
CHANGED
|
@@ -1,192 +1,192 @@
|
|
|
1
1
|
example_id | status | run_time |
|
|
2
2
|
----------------------------------------------------------------- | ------ | --------------- |
|
|
3
|
-
./spec/aircana/cli/commands/init_spec.rb[1:1:1] | passed | 0.
|
|
4
|
-
./spec/aircana/cli/commands/init_spec.rb[1:1:2] | passed | 0.
|
|
5
|
-
./spec/aircana/cli/commands/init_spec.rb[1:2:1:1] | passed | 0.
|
|
6
|
-
./spec/aircana/cli/commands/init_spec.rb[1:3:1] | passed | 0.
|
|
7
|
-
./spec/aircana/cli/commands/init_spec.rb[1:3:2:1] | passed | 0.
|
|
8
|
-
./spec/aircana/cli/commands/init_spec.rb[1:3:3:1] | passed | 0.
|
|
9
|
-
./spec/aircana/cli/commands/init_spec.rb[1:3:4:1] | passed | 0.
|
|
10
|
-
./spec/aircana/cli/commands/init_spec.rb[1:4:1] | passed | 0.
|
|
11
|
-
./spec/aircana/cli/commands/init_spec.rb[1:4:2] | passed | 0.
|
|
12
|
-
./spec/aircana/cli/commands/init_spec.rb[1:4:3] | passed | 0.
|
|
13
|
-
./spec/aircana/cli/commands/init_spec.rb[1:4:4] | passed | 0.
|
|
14
|
-
./spec/aircana/cli/commands/init_spec.rb[1:4:5] | passed | 0.
|
|
15
|
-
./spec/aircana/cli/commands/init_spec.rb[1:5:1] | passed | 0.
|
|
16
|
-
./spec/aircana/cli/commands/init_spec.rb[1:5:2] | passed | 0.
|
|
17
|
-
./spec/aircana/cli/commands/init_spec.rb[1:5:3] | passed | 0.
|
|
18
|
-
./spec/aircana/cli/commands/init_spec.rb[1:5:4] | passed | 0.
|
|
19
|
-
./spec/aircana/cli/commands/kb_spec.rb[1:1:1:1] | passed | 0.
|
|
20
|
-
./spec/aircana/cli/commands/kb_spec.rb[1:1:2:1] | passed | 0.
|
|
21
|
-
./spec/aircana/cli/commands/kb_spec.rb[1:2:1] | passed | 0.
|
|
22
|
-
./spec/aircana/cli/commands/kb_spec.rb[1:2:2] | passed | 0.
|
|
23
|
-
./spec/aircana/cli/commands/kb_spec.rb[1:3:1] | passed | 0.
|
|
24
|
-
./spec/aircana/cli/commands/kb_spec.rb[1:3:2] | passed | 0.
|
|
25
|
-
./spec/aircana/cli/commands/kb_spec.rb[1:4:1:1] | passed | 0.
|
|
26
|
-
./spec/aircana/cli/commands/kb_spec.rb[1:4:2:1] | passed | 0.
|
|
27
|
-
./spec/aircana/cli/commands/kb_spec.rb[1:5:1:1] | passed | 0.
|
|
28
|
-
./spec/aircana/cli/commands/kb_spec.rb[1:5:1:2] | passed | 0.
|
|
29
|
-
./spec/aircana/cli/commands/kb_spec.rb[1:5:2:1] | passed | 0.
|
|
30
|
-
./spec/aircana/cli/commands/kb_spec.rb[1:5:2:2] | passed | 0.
|
|
31
|
-
./spec/aircana/cli/commands/kb_spec.rb[1:5:2:3] | passed | 0.
|
|
32
|
-
./spec/aircana/configuration_spec.rb[1:1:1] | passed | 0.
|
|
33
|
-
./spec/aircana/configuration_spec.rb[1:2:1] | passed | 0.
|
|
34
|
-
./spec/aircana/configuration_spec.rb[1:3:1] | passed | 0.
|
|
35
|
-
./spec/aircana/configuration_spec.rb[1:4:1] | passed | 0.
|
|
36
|
-
./spec/aircana/configuration_spec.rb[1:5:1] | passed | 0.
|
|
37
|
-
./spec/aircana/configuration_spec.rb[1:6:1] | passed | 0.
|
|
38
|
-
./spec/aircana/configuration_spec.rb[1:6:2] | passed | 0.
|
|
39
|
-
./spec/aircana/configuration_spec.rb[1:7:1:1] | passed | 0.
|
|
40
|
-
./spec/aircana/configuration_spec.rb[1:7:2:1] | passed | 0.
|
|
41
|
-
./spec/aircana/configuration_spec.rb[1:7:3:1] | passed | 0.
|
|
42
|
-
./spec/aircana/configuration_spec.rb[1:7:4:1] | passed | 0.
|
|
43
|
-
./spec/aircana/contexts/confluence_spec.rb[1:1:1:1] | passed | 0.
|
|
44
|
-
./spec/aircana/contexts/confluence_spec.rb[1:1:1:2] | passed | 0.
|
|
45
|
-
./spec/aircana/contexts/confluence_spec.rb[1:1:1:3] | passed | 0.
|
|
46
|
-
./spec/aircana/contexts/confluence_spec.rb[1:1:2:1] | passed | 0.
|
|
47
|
-
./spec/aircana/contexts/confluence_spec.rb[1:1:2:2] | passed | 0.
|
|
48
|
-
./spec/aircana/contexts/confluence_spec.rb[1:1:2:3] | passed | 0.
|
|
49
|
-
./spec/aircana/contexts/confluence_spec.rb[1:1:3:1] | passed | 0.
|
|
50
|
-
./spec/aircana/contexts/confluence_spec.rb[1:1:3:2] | passed | 0.
|
|
51
|
-
./spec/aircana/contexts/local_spec.rb[1:1:1] | passed | 0.
|
|
52
|
-
./spec/aircana/contexts/local_spec.rb[1:1:2] | passed | 0.
|
|
53
|
-
./spec/aircana/contexts/local_spec.rb[1:1:3] | passed | 0.
|
|
54
|
-
./spec/aircana/contexts/local_spec.rb[1:1:4] | passed | 0.
|
|
55
|
-
./spec/aircana/contexts/local_spec.rb[1:1:5] | passed | 0.
|
|
56
|
-
./spec/aircana/contexts/local_spec.rb[1:1:6] | passed | 0.
|
|
57
|
-
./spec/aircana/contexts/local_spec.rb[1:1:7] | passed | 0.
|
|
58
|
-
./spec/aircana/contexts/local_spec.rb[1:1:8] | passed | 0.
|
|
59
|
-
./spec/aircana/contexts/manifest_spec.rb[1:1:1] | passed | 0.
|
|
60
|
-
./spec/aircana/contexts/manifest_spec.rb[1:1:2] | passed | 0.
|
|
61
|
-
./spec/aircana/contexts/manifest_spec.rb[1:1:3] | passed | 0.
|
|
62
|
-
./spec/aircana/contexts/manifest_spec.rb[1:2:1] | passed | 0.
|
|
63
|
-
./spec/aircana/contexts/manifest_spec.rb[1:2:2] | passed | 0.
|
|
64
|
-
./spec/aircana/contexts/manifest_spec.rb[1:3:1] | passed | 0.
|
|
65
|
-
./spec/aircana/contexts/manifest_spec.rb[1:3:2] | passed | 0.
|
|
66
|
-
./spec/aircana/contexts/manifest_spec.rb[1:3:3] | passed | 0.
|
|
67
|
-
./spec/aircana/contexts/manifest_spec.rb[1:3:4] | passed | 0.
|
|
68
|
-
./spec/aircana/contexts/manifest_spec.rb[1:4:1] | passed | 0.
|
|
69
|
-
./spec/aircana/contexts/manifest_spec.rb[1:4:2] | passed | 0.
|
|
70
|
-
./spec/aircana/contexts/manifest_spec.rb[1:5:1] | passed | 0.
|
|
71
|
-
./spec/aircana/contexts/manifest_spec.rb[1:5:2] | passed | 0.
|
|
72
|
-
./spec/aircana/contexts/manifest_spec.rb[1:6:1] | passed | 0.
|
|
73
|
-
./spec/aircana/contexts/manifest_spec.rb[1:6:2] | passed | 0.
|
|
74
|
-
./spec/aircana/contexts/manifest_spec.rb[1:6:3] | passed | 0.
|
|
75
|
-
./spec/aircana/contexts/manifest_spec.rb[1:6:4] | passed | 0.
|
|
76
|
-
./spec/aircana/contexts/manifest_spec.rb[1:6:5] | passed | 0.
|
|
77
|
-
./spec/aircana/contexts/manifest_spec.rb[1:6:6] | passed | 0.
|
|
78
|
-
./spec/aircana/contexts/manifest_spec.rb[1:6:7] | passed | 0.
|
|
79
|
-
./spec/aircana/contexts/manifest_spec.rb[1:6:8] | passed | 0.
|
|
80
|
-
./spec/aircana/contexts/manifest_spec.rb[1:6:9] | passed | 0.
|
|
81
|
-
./spec/aircana/contexts/manifest_spec.rb[1:6:10] | passed | 0.
|
|
82
|
-
./spec/aircana/contexts/manifest_spec.rb[1:6:11] | passed | 0.
|
|
83
|
-
./spec/aircana/contexts/manifest_spec.rb[1:6:12] | passed | 0.
|
|
84
|
-
./spec/aircana/contexts/web_spec.rb[1:1:1] | passed | 0.
|
|
85
|
-
./spec/aircana/contexts/web_spec.rb[1:2:1] | passed | 0.
|
|
86
|
-
./spec/aircana/contexts/web_spec.rb[1:3:1:1] | passed | 0.
|
|
87
|
-
./spec/aircana/contexts/web_spec.rb[1:3:1:2] | passed | 0.
|
|
88
|
-
./spec/aircana/contexts/web_spec.rb[1:3:1:3] | passed | 0.
|
|
89
|
-
./spec/aircana/contexts/web_spec.rb[1:3:2:1] | passed | 0.
|
|
90
|
-
./spec/aircana/contexts/web_spec.rb[1:3:2:2] | passed | 0.
|
|
91
|
-
./spec/aircana/contexts/web_spec.rb[1:3:3:1] | passed | 0.
|
|
92
|
-
./spec/aircana/contexts/web_spec.rb[1:3:3:2] | passed | 0.
|
|
93
|
-
./spec/aircana/contexts/web_spec.rb[1:3:3:3] | passed | 0.
|
|
94
|
-
./spec/aircana/contexts/web_spec.rb[1:3:3:4] | passed | 0.
|
|
95
|
-
./spec/aircana/contexts/web_spec.rb[1:3:3:5] | passed | 0.
|
|
96
|
-
./spec/aircana/contexts/web_spec.rb[1:3:4:1] | passed | 0.
|
|
97
|
-
./spec/aircana/contexts/web_spec.rb[1:3:4:2] | passed | 0.
|
|
98
|
-
./spec/aircana/contexts/web_spec.rb[1:3:4:3] | passed | 0.
|
|
99
|
-
./spec/aircana/contexts/web_spec.rb[1:3:5:1] | passed | 0.
|
|
100
|
-
./spec/aircana/contexts/web_spec.rb[1:3:5:2] | passed | 0.
|
|
101
|
-
./spec/aircana/contexts/web_spec.rb[1:3:5:3] | passed | 0.
|
|
102
|
-
./spec/aircana/contexts/web_spec.rb[1:3:6:1] | passed | 0.
|
|
103
|
-
./spec/aircana/contexts/web_spec.rb[1:3:6:2] | passed | 0.
|
|
104
|
-
./spec/aircana/contexts/web_spec.rb[1:3:6:3] | passed | 0.
|
|
105
|
-
./spec/aircana/contexts/web_spec.rb[1:3:7:1] | passed | 0.
|
|
106
|
-
./spec/aircana/contexts/web_spec.rb[1:3:7:2] | passed | 0.
|
|
107
|
-
./spec/aircana/fzf_helper_spec.rb[1:1:1:1] | passed | 0.
|
|
108
|
-
./spec/aircana/fzf_helper_spec.rb[1:1:1:2] | passed | 0.
|
|
109
|
-
./spec/aircana/fzf_helper_spec.rb[1:1:1:3] | passed | 0.
|
|
110
|
-
./spec/aircana/fzf_helper_spec.rb[1:1:2:1] | passed | 0.
|
|
111
|
-
./spec/aircana/fzf_helper_spec.rb[1:1:3:1] | passed | 0.
|
|
112
|
-
./spec/aircana/fzf_helper_spec.rb[1:2:1:1] | passed | 0.
|
|
113
|
-
./spec/aircana/fzf_helper_spec.rb[1:2:1:2] | passed | 0.
|
|
114
|
-
./spec/aircana/fzf_helper_spec.rb[1:2:1:3] | passed | 0.
|
|
115
|
-
./spec/aircana/fzf_helper_spec.rb[1:2:2:1] | passed | 0.
|
|
116
|
-
./spec/aircana/fzf_helper_spec.rb[1:2:2:2] | passed | 0.
|
|
117
|
-
./spec/aircana/generators/hooks_generator_spec.rb[1:1:1] | passed | 0.
|
|
118
|
-
./spec/aircana/generators/hooks_generator_spec.rb[1:2:1] | passed | 0.
|
|
119
|
-
./spec/aircana/generators/hooks_generator_spec.rb[1:3:1] | passed | 0.
|
|
120
|
-
./spec/aircana/generators/hooks_generator_spec.rb[1:3:2] | passed | 0.
|
|
121
|
-
./spec/aircana/generators/hooks_generator_spec.rb[1:4:1] | passed | 0.
|
|
122
|
-
./spec/aircana/generators/hooks_generator_spec.rb[1:5:1:1] | passed | 0.
|
|
123
|
-
./spec/aircana/generators/hooks_generator_spec.rb[1:5:2:1] | passed | 0.
|
|
124
|
-
./spec/aircana/generators/hooks_generator_spec.rb[1:6:1] | passed | 0.
|
|
125
|
-
./spec/aircana/generators/hooks_generator_spec.rb[1:7:1] | passed | 0.
|
|
126
|
-
./spec/aircana/generators/plan_command_generator_spec.rb[1:1:1] | passed | 0.
|
|
127
|
-
./spec/aircana/generators/plan_command_generator_spec.rb[1:1:2] | passed | 0.
|
|
128
|
-
./spec/aircana/generators/plan_command_generator_spec.rb[1:1:3] | passed | 0.
|
|
129
|
-
./spec/aircana/generators/plan_command_generator_spec.rb[1:2:1] | passed | 0.
|
|
130
|
-
./spec/aircana/generators/plan_command_generator_spec.rb[1:2:2] | passed | 0.
|
|
131
|
-
./spec/aircana/generators/record_command_generator_spec.rb[1:1:1] | passed | 0.
|
|
132
|
-
./spec/aircana/generators/record_command_generator_spec.rb[1:2:1] | passed | 0.
|
|
133
|
-
./spec/aircana/generators/record_command_generator_spec.rb[1:2:2] | passed | 0.
|
|
134
|
-
./spec/aircana/generators/skills_generator_spec.rb[1:1:1] | passed | 0.
|
|
135
|
-
./spec/aircana/generators/skills_generator_spec.rb[1:1:2] | passed | 0.
|
|
136
|
-
./spec/aircana/generators/skills_generator_spec.rb[1:1:3] | passed | 0.
|
|
137
|
-
./spec/aircana/generators/skills_generator_spec.rb[1:2:1] | passed | 0.
|
|
138
|
-
./spec/aircana/generators/skills_generator_spec.rb[1:2:2] | passed | 0.
|
|
139
|
-
./spec/aircana/generators/skills_generator_spec.rb[1:2:3] | passed | 0.
|
|
140
|
-
./spec/aircana/generators/skills_generator_spec.rb[1:3:1] | passed | 0.
|
|
141
|
-
./spec/aircana/generators/skills_generator_spec.rb[1:3:2] | passed | 0.
|
|
142
|
-
./spec/aircana/generators/skills_generator_spec.rb[1:3:3] | passed | 0.
|
|
143
|
-
./spec/aircana/generators/skills_generator_spec.rb[1:3:4] | passed | 0.
|
|
144
|
-
./spec/aircana/generators/skills_generator_spec.rb[1:3:5] | passed | 0.
|
|
145
|
-
./spec/aircana/generators/skills_generator_spec.rb[1:4:1] | passed | 0.
|
|
146
|
-
./spec/aircana/generators/skills_generator_spec.rb[1:4:2] | passed | 0.
|
|
3
|
+
./spec/aircana/cli/commands/init_spec.rb[1:1:1] | passed | 0.02241 seconds |
|
|
4
|
+
./spec/aircana/cli/commands/init_spec.rb[1:1:2] | passed | 0.003 seconds |
|
|
5
|
+
./spec/aircana/cli/commands/init_spec.rb[1:2:1:1] | passed | 0.00417 seconds |
|
|
6
|
+
./spec/aircana/cli/commands/init_spec.rb[1:3:1] | passed | 0.00203 seconds |
|
|
7
|
+
./spec/aircana/cli/commands/init_spec.rb[1:3:2:1] | passed | 0.00161 seconds |
|
|
8
|
+
./spec/aircana/cli/commands/init_spec.rb[1:3:3:1] | passed | 0.00165 seconds |
|
|
9
|
+
./spec/aircana/cli/commands/init_spec.rb[1:3:4:1] | passed | 0.00182 seconds |
|
|
10
|
+
./spec/aircana/cli/commands/init_spec.rb[1:4:1] | passed | 0.00142 seconds |
|
|
11
|
+
./spec/aircana/cli/commands/init_spec.rb[1:4:2] | passed | 0.00143 seconds |
|
|
12
|
+
./spec/aircana/cli/commands/init_spec.rb[1:4:3] | passed | 0.00134 seconds |
|
|
13
|
+
./spec/aircana/cli/commands/init_spec.rb[1:4:4] | passed | 0.00126 seconds |
|
|
14
|
+
./spec/aircana/cli/commands/init_spec.rb[1:4:5] | passed | 0.00132 seconds |
|
|
15
|
+
./spec/aircana/cli/commands/init_spec.rb[1:5:1] | passed | 0.00265 seconds |
|
|
16
|
+
./spec/aircana/cli/commands/init_spec.rb[1:5:2] | passed | 0.00302 seconds |
|
|
17
|
+
./spec/aircana/cli/commands/init_spec.rb[1:5:3] | passed | 0.00335 seconds |
|
|
18
|
+
./spec/aircana/cli/commands/init_spec.rb[1:5:4] | passed | 0.00274 seconds |
|
|
19
|
+
./spec/aircana/cli/commands/kb_spec.rb[1:1:1:1] | passed | 0.00042 seconds |
|
|
20
|
+
./spec/aircana/cli/commands/kb_spec.rb[1:1:2:1] | passed | 0.00071 seconds |
|
|
21
|
+
./spec/aircana/cli/commands/kb_spec.rb[1:2:1] | passed | 0.00037 seconds |
|
|
22
|
+
./spec/aircana/cli/commands/kb_spec.rb[1:2:2] | passed | 0.00112 seconds |
|
|
23
|
+
./spec/aircana/cli/commands/kb_spec.rb[1:3:1] | passed | 0.00114 seconds |
|
|
24
|
+
./spec/aircana/cli/commands/kb_spec.rb[1:3:2] | passed | 0.01254 seconds |
|
|
25
|
+
./spec/aircana/cli/commands/kb_spec.rb[1:4:1:1] | passed | 0.00027 seconds |
|
|
26
|
+
./spec/aircana/cli/commands/kb_spec.rb[1:4:2:1] | passed | 0.00191 seconds |
|
|
27
|
+
./spec/aircana/cli/commands/kb_spec.rb[1:5:1:1] | passed | 0.00019 seconds |
|
|
28
|
+
./spec/aircana/cli/commands/kb_spec.rb[1:5:1:2] | passed | 0.00009 seconds |
|
|
29
|
+
./spec/aircana/cli/commands/kb_spec.rb[1:5:2:1] | passed | 0.00009 seconds |
|
|
30
|
+
./spec/aircana/cli/commands/kb_spec.rb[1:5:2:2] | passed | 0.00123 seconds |
|
|
31
|
+
./spec/aircana/cli/commands/kb_spec.rb[1:5:2:3] | passed | 0.00024 seconds |
|
|
32
|
+
./spec/aircana/configuration_spec.rb[1:1:1] | passed | 0.00013 seconds |
|
|
33
|
+
./spec/aircana/configuration_spec.rb[1:2:1] | passed | 0.00077 seconds |
|
|
34
|
+
./spec/aircana/configuration_spec.rb[1:3:1] | passed | 0.00006 seconds |
|
|
35
|
+
./spec/aircana/configuration_spec.rb[1:4:1] | passed | 0.00006 seconds |
|
|
36
|
+
./spec/aircana/configuration_spec.rb[1:5:1] | passed | 0.00005 seconds |
|
|
37
|
+
./spec/aircana/configuration_spec.rb[1:6:1] | passed | 0.00006 seconds |
|
|
38
|
+
./spec/aircana/configuration_spec.rb[1:6:2] | passed | 0.00005 seconds |
|
|
39
|
+
./spec/aircana/configuration_spec.rb[1:7:1:1] | passed | 0.0003 seconds |
|
|
40
|
+
./spec/aircana/configuration_spec.rb[1:7:2:1] | passed | 0.00022 seconds |
|
|
41
|
+
./spec/aircana/configuration_spec.rb[1:7:3:1] | passed | 0.00021 seconds |
|
|
42
|
+
./spec/aircana/configuration_spec.rb[1:7:4:1] | passed | 0.00039 seconds |
|
|
43
|
+
./spec/aircana/contexts/confluence_spec.rb[1:1:1:1] | passed | 0.00467 seconds |
|
|
44
|
+
./spec/aircana/contexts/confluence_spec.rb[1:1:1:2] | passed | 0.001 seconds |
|
|
45
|
+
./spec/aircana/contexts/confluence_spec.rb[1:1:1:3] | passed | 0.00199 seconds |
|
|
46
|
+
./spec/aircana/contexts/confluence_spec.rb[1:1:2:1] | passed | 0.00071 seconds |
|
|
47
|
+
./spec/aircana/contexts/confluence_spec.rb[1:1:2:2] | passed | 0.00038 seconds |
|
|
48
|
+
./spec/aircana/contexts/confluence_spec.rb[1:1:2:3] | passed | 0.00038 seconds |
|
|
49
|
+
./spec/aircana/contexts/confluence_spec.rb[1:1:3:1] | passed | 0.00084 seconds |
|
|
50
|
+
./spec/aircana/contexts/confluence_spec.rb[1:1:3:2] | passed | 0.00079 seconds |
|
|
51
|
+
./spec/aircana/contexts/local_spec.rb[1:1:1] | passed | 0.00033 seconds |
|
|
52
|
+
./spec/aircana/contexts/local_spec.rb[1:1:2] | passed | 0.00019 seconds |
|
|
53
|
+
./spec/aircana/contexts/local_spec.rb[1:1:3] | passed | 0.00032 seconds |
|
|
54
|
+
./spec/aircana/contexts/local_spec.rb[1:1:4] | passed | 0.00018 seconds |
|
|
55
|
+
./spec/aircana/contexts/local_spec.rb[1:1:5] | passed | 0.00016 seconds |
|
|
56
|
+
./spec/aircana/contexts/local_spec.rb[1:1:6] | passed | 0.00016 seconds |
|
|
57
|
+
./spec/aircana/contexts/local_spec.rb[1:1:7] | passed | 0.00023 seconds |
|
|
58
|
+
./spec/aircana/contexts/local_spec.rb[1:1:8] | passed | 0.00023 seconds |
|
|
59
|
+
./spec/aircana/contexts/manifest_spec.rb[1:1:1] | passed | 0.00031 seconds |
|
|
60
|
+
./spec/aircana/contexts/manifest_spec.rb[1:1:2] | passed | 0.00023 seconds |
|
|
61
|
+
./spec/aircana/contexts/manifest_spec.rb[1:1:3] | passed | 0.0002 seconds |
|
|
62
|
+
./spec/aircana/contexts/manifest_spec.rb[1:2:1] | passed | 0.00024 seconds |
|
|
63
|
+
./spec/aircana/contexts/manifest_spec.rb[1:2:2] | passed | 0.00025 seconds |
|
|
64
|
+
./spec/aircana/contexts/manifest_spec.rb[1:3:1] | passed | 0.00022 seconds |
|
|
65
|
+
./spec/aircana/contexts/manifest_spec.rb[1:3:2] | passed | 0.00009 seconds |
|
|
66
|
+
./spec/aircana/contexts/manifest_spec.rb[1:3:3] | passed | 0.00023 seconds |
|
|
67
|
+
./spec/aircana/contexts/manifest_spec.rb[1:3:4] | passed | 0.0002 seconds |
|
|
68
|
+
./spec/aircana/contexts/manifest_spec.rb[1:4:1] | passed | 0.00039 seconds |
|
|
69
|
+
./spec/aircana/contexts/manifest_spec.rb[1:4:2] | passed | 0.0001 seconds |
|
|
70
|
+
./spec/aircana/contexts/manifest_spec.rb[1:5:1] | passed | 0.0002 seconds |
|
|
71
|
+
./spec/aircana/contexts/manifest_spec.rb[1:5:2] | passed | 0.0001 seconds |
|
|
72
|
+
./spec/aircana/contexts/manifest_spec.rb[1:6:1] | passed | 0.00011 seconds |
|
|
73
|
+
./spec/aircana/contexts/manifest_spec.rb[1:6:2] | passed | 0.0001 seconds |
|
|
74
|
+
./spec/aircana/contexts/manifest_spec.rb[1:6:3] | passed | 0.0001 seconds |
|
|
75
|
+
./spec/aircana/contexts/manifest_spec.rb[1:6:4] | passed | 0.0001 seconds |
|
|
76
|
+
./spec/aircana/contexts/manifest_spec.rb[1:6:5] | passed | 0.00011 seconds |
|
|
77
|
+
./spec/aircana/contexts/manifest_spec.rb[1:6:6] | passed | 0.0001 seconds |
|
|
78
|
+
./spec/aircana/contexts/manifest_spec.rb[1:6:7] | passed | 0.00009 seconds |
|
|
79
|
+
./spec/aircana/contexts/manifest_spec.rb[1:6:8] | passed | 0.0001 seconds |
|
|
80
|
+
./spec/aircana/contexts/manifest_spec.rb[1:6:9] | passed | 0.00009 seconds |
|
|
81
|
+
./spec/aircana/contexts/manifest_spec.rb[1:6:10] | passed | 0.00009 seconds |
|
|
82
|
+
./spec/aircana/contexts/manifest_spec.rb[1:6:11] | passed | 0.0002 seconds |
|
|
83
|
+
./spec/aircana/contexts/manifest_spec.rb[1:6:12] | passed | 0.0002 seconds |
|
|
84
|
+
./spec/aircana/contexts/web_spec.rb[1:1:1] | passed | 0.00028 seconds |
|
|
85
|
+
./spec/aircana/contexts/web_spec.rb[1:2:1] | passed | 0.00049 seconds |
|
|
86
|
+
./spec/aircana/contexts/web_spec.rb[1:3:1:1] | passed | 0.00021 seconds |
|
|
87
|
+
./spec/aircana/contexts/web_spec.rb[1:3:1:2] | passed | 0.00019 seconds |
|
|
88
|
+
./spec/aircana/contexts/web_spec.rb[1:3:1:3] | passed | 0.00018 seconds |
|
|
89
|
+
./spec/aircana/contexts/web_spec.rb[1:3:2:1] | passed | 0.0003 seconds |
|
|
90
|
+
./spec/aircana/contexts/web_spec.rb[1:3:2:2] | passed | 0.0002 seconds |
|
|
91
|
+
./spec/aircana/contexts/web_spec.rb[1:3:3:1] | passed | 0.00029 seconds |
|
|
92
|
+
./spec/aircana/contexts/web_spec.rb[1:3:3:2] | passed | 0.00044 seconds |
|
|
93
|
+
./spec/aircana/contexts/web_spec.rb[1:3:3:3] | passed | 0.00054 seconds |
|
|
94
|
+
./spec/aircana/contexts/web_spec.rb[1:3:3:4] | passed | 0.0003 seconds |
|
|
95
|
+
./spec/aircana/contexts/web_spec.rb[1:3:3:5] | passed | 0.00038 seconds |
|
|
96
|
+
./spec/aircana/contexts/web_spec.rb[1:3:4:1] | passed | 0.00022 seconds |
|
|
97
|
+
./spec/aircana/contexts/web_spec.rb[1:3:4:2] | passed | 0.00021 seconds |
|
|
98
|
+
./spec/aircana/contexts/web_spec.rb[1:3:4:3] | passed | 0.0002 seconds |
|
|
99
|
+
./spec/aircana/contexts/web_spec.rb[1:3:5:1] | passed | 0.00083 seconds |
|
|
100
|
+
./spec/aircana/contexts/web_spec.rb[1:3:5:2] | passed | 0.0002 seconds |
|
|
101
|
+
./spec/aircana/contexts/web_spec.rb[1:3:5:3] | passed | 0.0005 seconds |
|
|
102
|
+
./spec/aircana/contexts/web_spec.rb[1:3:6:1] | passed | 0.0004 seconds |
|
|
103
|
+
./spec/aircana/contexts/web_spec.rb[1:3:6:2] | passed | 0.00038 seconds |
|
|
104
|
+
./spec/aircana/contexts/web_spec.rb[1:3:6:3] | passed | 0.00037 seconds |
|
|
105
|
+
./spec/aircana/contexts/web_spec.rb[1:3:7:1] | passed | 0.0002 seconds |
|
|
106
|
+
./spec/aircana/contexts/web_spec.rb[1:3:7:2] | passed | 0.00018 seconds |
|
|
107
|
+
./spec/aircana/fzf_helper_spec.rb[1:1:1:1] | passed | 0.00031 seconds |
|
|
108
|
+
./spec/aircana/fzf_helper_spec.rb[1:1:1:2] | passed | 0.00026 seconds |
|
|
109
|
+
./spec/aircana/fzf_helper_spec.rb[1:1:1:3] | passed | 0.00031 seconds |
|
|
110
|
+
./spec/aircana/fzf_helper_spec.rb[1:1:2:1] | passed | 0.00039 seconds |
|
|
111
|
+
./spec/aircana/fzf_helper_spec.rb[1:1:3:1] | passed | 0.00037 seconds |
|
|
112
|
+
./spec/aircana/fzf_helper_spec.rb[1:2:1:1] | passed | 0.0002 seconds |
|
|
113
|
+
./spec/aircana/fzf_helper_spec.rb[1:2:1:2] | passed | 0.00019 seconds |
|
|
114
|
+
./spec/aircana/fzf_helper_spec.rb[1:2:1:3] | passed | 0.00018 seconds |
|
|
115
|
+
./spec/aircana/fzf_helper_spec.rb[1:2:2:1] | passed | 0.00017 seconds |
|
|
116
|
+
./spec/aircana/fzf_helper_spec.rb[1:2:2:2] | passed | 0.00013 seconds |
|
|
117
|
+
./spec/aircana/generators/hooks_generator_spec.rb[1:1:1] | passed | 0.00007 seconds |
|
|
118
|
+
./spec/aircana/generators/hooks_generator_spec.rb[1:2:1] | passed | 0.00005 seconds |
|
|
119
|
+
./spec/aircana/generators/hooks_generator_spec.rb[1:3:1] | passed | 0.00066 seconds |
|
|
120
|
+
./spec/aircana/generators/hooks_generator_spec.rb[1:3:2] | passed | 0.00033 seconds |
|
|
121
|
+
./spec/aircana/generators/hooks_generator_spec.rb[1:4:1] | passed | 0.00017 seconds |
|
|
122
|
+
./spec/aircana/generators/hooks_generator_spec.rb[1:5:1:1] | passed | 0.00016 seconds |
|
|
123
|
+
./spec/aircana/generators/hooks_generator_spec.rb[1:5:2:1] | passed | 0.00006 seconds |
|
|
124
|
+
./spec/aircana/generators/hooks_generator_spec.rb[1:6:1] | passed | 0.00085 seconds |
|
|
125
|
+
./spec/aircana/generators/hooks_generator_spec.rb[1:7:1] | passed | 0.00032 seconds |
|
|
126
|
+
./spec/aircana/generators/plan_command_generator_spec.rb[1:1:1] | passed | 0.00054 seconds |
|
|
127
|
+
./spec/aircana/generators/plan_command_generator_spec.rb[1:1:2] | passed | 0.0005 seconds |
|
|
128
|
+
./spec/aircana/generators/plan_command_generator_spec.rb[1:1:3] | passed | 0.00046 seconds |
|
|
129
|
+
./spec/aircana/generators/plan_command_generator_spec.rb[1:2:1] | passed | 0.00018 seconds |
|
|
130
|
+
./spec/aircana/generators/plan_command_generator_spec.rb[1:2:2] | passed | 0.00013 seconds |
|
|
131
|
+
./spec/aircana/generators/record_command_generator_spec.rb[1:1:1] | passed | 0.00039 seconds |
|
|
132
|
+
./spec/aircana/generators/record_command_generator_spec.rb[1:2:1] | passed | 0.00719 seconds |
|
|
133
|
+
./spec/aircana/generators/record_command_generator_spec.rb[1:2:2] | passed | 0.00026 seconds |
|
|
134
|
+
./spec/aircana/generators/skills_generator_spec.rb[1:1:1] | passed | 0.00021 seconds |
|
|
135
|
+
./spec/aircana/generators/skills_generator_spec.rb[1:1:2] | passed | 0.00012 seconds |
|
|
136
|
+
./spec/aircana/generators/skills_generator_spec.rb[1:1:3] | passed | 0.00009 seconds |
|
|
137
|
+
./spec/aircana/generators/skills_generator_spec.rb[1:2:1] | passed | 0.00028 seconds |
|
|
138
|
+
./spec/aircana/generators/skills_generator_spec.rb[1:2:2] | passed | 0.00028 seconds |
|
|
139
|
+
./spec/aircana/generators/skills_generator_spec.rb[1:2:3] | passed | 0.00026 seconds |
|
|
140
|
+
./spec/aircana/generators/skills_generator_spec.rb[1:3:1] | passed | 0.00011 seconds |
|
|
141
|
+
./spec/aircana/generators/skills_generator_spec.rb[1:3:2] | passed | 0.0009 seconds |
|
|
142
|
+
./spec/aircana/generators/skills_generator_spec.rb[1:3:3] | passed | 0.00012 seconds |
|
|
143
|
+
./spec/aircana/generators/skills_generator_spec.rb[1:3:4] | passed | 0.00008 seconds |
|
|
144
|
+
./spec/aircana/generators/skills_generator_spec.rb[1:3:5] | passed | 0.00012 seconds |
|
|
145
|
+
./spec/aircana/generators/skills_generator_spec.rb[1:4:1] | passed | 0.00009 seconds |
|
|
146
|
+
./spec/aircana/generators/skills_generator_spec.rb[1:4:2] | passed | 0.00008 seconds |
|
|
147
147
|
./spec/aircana/generators/skills_generator_spec.rb[1:4:3] | passed | 0.00007 seconds |
|
|
148
|
-
./spec/aircana/generators/skills_generator_spec.rb[1:5:1] | passed | 0.
|
|
149
|
-
./spec/aircana/generators/skills_generator_spec.rb[1:6:1] | passed | 0.
|
|
150
|
-
./spec/aircana/generators/skills_generator_spec.rb[1:6:2] | passed | 0.
|
|
151
|
-
./spec/aircana/generators/skills_generator_spec.rb[1:6:3] | passed | 0.
|
|
152
|
-
./spec/aircana/generators/skills_generator_spec.rb[1:6:4] | passed | 0.
|
|
153
|
-
./spec/aircana/generators/skills_generator_spec.rb[1:6:5] | passed | 0.
|
|
154
|
-
./spec/aircana/generators/skills_generator_spec.rb[1:6:6] | passed | 0.
|
|
155
|
-
./spec/aircana/generators/skills_generator_spec.rb[1:6:7] | passed | 0.
|
|
156
|
-
./spec/aircana/generators/skills_generator_spec.rb[1:7:1] | passed | 0.
|
|
157
|
-
./spec/aircana/generators/skills_generator_spec.rb[1:7:2] | passed | 0.
|
|
158
|
-
./spec/aircana/human_logger_spec.rb[1:1:1] | passed | 0.
|
|
148
|
+
./spec/aircana/generators/skills_generator_spec.rb[1:5:1] | passed | 0.00008 seconds |
|
|
149
|
+
./spec/aircana/generators/skills_generator_spec.rb[1:6:1] | passed | 0.0001 seconds |
|
|
150
|
+
./spec/aircana/generators/skills_generator_spec.rb[1:6:2] | passed | 0.00009 seconds |
|
|
151
|
+
./spec/aircana/generators/skills_generator_spec.rb[1:6:3] | passed | 0.00009 seconds |
|
|
152
|
+
./spec/aircana/generators/skills_generator_spec.rb[1:6:4] | passed | 0.00009 seconds |
|
|
153
|
+
./spec/aircana/generators/skills_generator_spec.rb[1:6:5] | passed | 0.00009 seconds |
|
|
154
|
+
./spec/aircana/generators/skills_generator_spec.rb[1:6:6] | passed | 0.00009 seconds |
|
|
155
|
+
./spec/aircana/generators/skills_generator_spec.rb[1:6:7] | passed | 0.00008 seconds |
|
|
156
|
+
./spec/aircana/generators/skills_generator_spec.rb[1:7:1] | passed | 0.00118 seconds |
|
|
157
|
+
./spec/aircana/generators/skills_generator_spec.rb[1:7:2] | passed | 0.00043 seconds |
|
|
158
|
+
./spec/aircana/human_logger_spec.rb[1:1:1] | passed | 0.00012 seconds |
|
|
159
159
|
./spec/aircana/human_logger_spec.rb[1:2:1] | passed | 0.00007 seconds |
|
|
160
|
-
./spec/aircana/human_logger_spec.rb[1:3:1] | passed | 0.
|
|
161
|
-
./spec/aircana/human_logger_spec.rb[1:4:1] | passed | 0.
|
|
162
|
-
./spec/aircana/human_logger_spec.rb[1:5:1] | passed | 0.
|
|
163
|
-
./spec/aircana/human_logger_spec.rb[1:5:2] | passed | 0.
|
|
164
|
-
./spec/aircana/human_logger_spec.rb[1:5:3] | passed | 0.
|
|
165
|
-
./spec/aircana/human_logger_spec.rb[1:5:4] | passed | 0.
|
|
166
|
-
./spec/aircana/human_logger_spec.rb[1:5:5] | passed | 0.
|
|
160
|
+
./spec/aircana/human_logger_spec.rb[1:3:1] | passed | 0.00007 seconds |
|
|
161
|
+
./spec/aircana/human_logger_spec.rb[1:4:1] | passed | 0.00006 seconds |
|
|
162
|
+
./spec/aircana/human_logger_spec.rb[1:5:1] | passed | 0.00005 seconds |
|
|
163
|
+
./spec/aircana/human_logger_spec.rb[1:5:2] | passed | 0.00005 seconds |
|
|
164
|
+
./spec/aircana/human_logger_spec.rb[1:5:3] | passed | 0.00005 seconds |
|
|
165
|
+
./spec/aircana/human_logger_spec.rb[1:5:4] | passed | 0.00005 seconds |
|
|
166
|
+
./spec/aircana/human_logger_spec.rb[1:5:5] | passed | 0.00005 seconds |
|
|
167
167
|
./spec/aircana/human_logger_spec.rb[1:5:6] | passed | 0.00004 seconds |
|
|
168
|
-
./spec/aircana/human_logger_spec.rb[1:5:7] | passed | 0.
|
|
169
|
-
./spec/aircana/human_logger_spec.rb[1:6:1] | passed | 0.
|
|
170
|
-
./spec/aircana/llm/claude_client_spec.rb[1:1:1:1] | passed | 0.
|
|
171
|
-
./spec/aircana/llm/claude_client_spec.rb[1:1:1:2] | passed | 0.
|
|
172
|
-
./spec/aircana/llm/claude_client_spec.rb[1:1:1:3] | passed | 0.
|
|
173
|
-
./spec/aircana/llm/claude_client_spec.rb[1:1:1:4] | passed | 0.
|
|
174
|
-
./spec/aircana/llm/claude_client_spec.rb[1:1:2:1] | passed | 0.
|
|
175
|
-
./spec/aircana/llm/claude_client_spec.rb[1:1:2:2] | passed | 0.
|
|
176
|
-
./spec/aircana/llm/claude_client_spec.rb[1:1:3:1] | passed | 0.
|
|
177
|
-
./spec/aircana/llm/claude_client_spec.rb[1:2:1] | passed | 0.
|
|
178
|
-
./spec/aircana/llm/claude_client_spec.rb[1:2:2] | passed | 0.
|
|
179
|
-
./spec/aircana/llm/claude_client_spec.rb[1:3:1:1] | passed | 0.
|
|
180
|
-
./spec/aircana/llm/claude_client_spec.rb[1:3:1:2] | passed | 0.
|
|
181
|
-
./spec/aircana/system_checker_spec.rb[1:1:1:1] | passed | 0.
|
|
182
|
-
./spec/aircana/system_checker_spec.rb[1:1:2:1] | passed | 0.
|
|
183
|
-
./spec/aircana/system_checker_spec.rb[1:1:3:1] | passed | 0.
|
|
184
|
-
./spec/aircana/system_checker_spec.rb[1:2:1] | passed | 0.
|
|
185
|
-
./spec/aircana/system_checker_spec.rb[1:2:2] | passed | 0.
|
|
186
|
-
./spec/aircana/system_checker_spec.rb[1:3:1] | passed | 0.
|
|
187
|
-
./spec/aircana/system_checker_spec.rb[1:3:2] | passed | 0.
|
|
188
|
-
./spec/aircana/system_checker_spec.rb[1:3:3] | passed | 0.
|
|
189
|
-
./spec/aircana/system_checker_spec.rb[1:3:4] | passed | 0.
|
|
190
|
-
./spec/aircana/system_checker_spec.rb[1:3:5] | passed | 0.
|
|
191
|
-
./spec/aircana_spec.rb[1:1] | passed | 0.
|
|
192
|
-
./spec/aircana_spec.rb[1:2] | passed | 0.
|
|
168
|
+
./spec/aircana/human_logger_spec.rb[1:5:7] | passed | 0.00005 seconds |
|
|
169
|
+
./spec/aircana/human_logger_spec.rb[1:6:1] | passed | 0.00005 seconds |
|
|
170
|
+
./spec/aircana/llm/claude_client_spec.rb[1:1:1:1] | passed | 0.00086 seconds |
|
|
171
|
+
./spec/aircana/llm/claude_client_spec.rb[1:1:1:2] | passed | 0.00064 seconds |
|
|
172
|
+
./spec/aircana/llm/claude_client_spec.rb[1:1:1:3] | passed | 0.00084 seconds |
|
|
173
|
+
./spec/aircana/llm/claude_client_spec.rb[1:1:1:4] | passed | 0.00058 seconds |
|
|
174
|
+
./spec/aircana/llm/claude_client_spec.rb[1:1:2:1] | passed | 0.00068 seconds |
|
|
175
|
+
./spec/aircana/llm/claude_client_spec.rb[1:1:2:2] | passed | 0.00055 seconds |
|
|
176
|
+
./spec/aircana/llm/claude_client_spec.rb[1:1:3:1] | passed | 0.0009 seconds |
|
|
177
|
+
./spec/aircana/llm/claude_client_spec.rb[1:2:1] | passed | 0.00057 seconds |
|
|
178
|
+
./spec/aircana/llm/claude_client_spec.rb[1:2:2] | passed | 0.00054 seconds |
|
|
179
|
+
./spec/aircana/llm/claude_client_spec.rb[1:3:1:1] | passed | 0.00038 seconds |
|
|
180
|
+
./spec/aircana/llm/claude_client_spec.rb[1:3:1:2] | passed | 0.00034 seconds |
|
|
181
|
+
./spec/aircana/system_checker_spec.rb[1:1:1:1] | passed | 0.00056 seconds |
|
|
182
|
+
./spec/aircana/system_checker_spec.rb[1:1:2:1] | passed | 0.00074 seconds |
|
|
183
|
+
./spec/aircana/system_checker_spec.rb[1:1:3:1] | passed | 0.00133 seconds |
|
|
184
|
+
./spec/aircana/system_checker_spec.rb[1:2:1] | passed | 0.00038 seconds |
|
|
185
|
+
./spec/aircana/system_checker_spec.rb[1:2:2] | passed | 0.00035 seconds |
|
|
186
|
+
./spec/aircana/system_checker_spec.rb[1:3:1] | passed | 0.00055 seconds |
|
|
187
|
+
./spec/aircana/system_checker_spec.rb[1:3:2] | passed | 0.00036 seconds |
|
|
188
|
+
./spec/aircana/system_checker_spec.rb[1:3:3] | passed | 0.00039 seconds |
|
|
189
|
+
./spec/aircana/system_checker_spec.rb[1:3:4] | passed | 0.00046 seconds |
|
|
190
|
+
./spec/aircana/system_checker_spec.rb[1:3:5] | passed | 0.00029 seconds |
|
|
191
|
+
./spec/aircana_spec.rb[1:1] | passed | 0.00005 seconds |
|
|
192
|
+
./spec/aircana_spec.rb[1:2] | passed | 0.00091 seconds |
|
data/CLAUDE.md
CHANGED
|
@@ -104,9 +104,10 @@ Aircana is a Ruby gem that creates and manages Claude Code plugins with knowledg
|
|
|
104
104
|
- **Configuration** (`lib/aircana/configuration.rb`): Path resolution system
|
|
105
105
|
- Plugin root detection via environment variables (AIRCANA_PLUGIN_ROOT, CLAUDE_PLUGIN_ROOT)
|
|
106
106
|
- Plugin-aware paths (commands, skills, hooks directories)
|
|
107
|
-
-
|
|
107
|
+
- Conditional skills directory location:
|
|
108
|
+
- Plugin mode (has `.claude-plugin/plugin.json`): `skills/` (Claude Code standard)
|
|
109
|
+
- Non-plugin mode (one-off usage): `.claude/skills/` (local development)
|
|
108
110
|
- Automatic plugin name extraction from plugin.json
|
|
109
|
-
- Resolves to `~/.claude/skills/<kb-name>/` for knowledge storage
|
|
110
111
|
|
|
111
112
|
- **LLM Integration**:
|
|
112
113
|
- `llm/claude_client.rb`: Claude API client for web title generation
|
|
@@ -126,32 +127,39 @@ Aircana is a Ruby gem that creates and manages Claude Code plugins with knowledg
|
|
|
126
127
|
- **Commands**: Custom slash commands for workflow automation
|
|
127
128
|
|
|
128
129
|
### File Organization
|
|
129
|
-
- **Plugin Structure
|
|
130
|
+
- **Plugin Structure** (when in plugin mode):
|
|
130
131
|
- `.claude-plugin/plugin.json` - Plugin manifest with metadata and versioning
|
|
131
|
-
- `agents/` - Knowledge base
|
|
132
|
+
- `agents/` - Knowledge base manifests (metadata about knowledge sources)
|
|
132
133
|
- `agents/<kb-name>/manifest.json` - Tracks knowledge sources per KB
|
|
133
|
-
- `
|
|
134
|
+
- `skills/` - Knowledge base SKILL.md files (Claude Code reads from here)
|
|
135
|
+
- `skills/<kb-name>/SKILL.md` - Main skill definition file
|
|
136
|
+
- `skills/<kb-name>/*.md` - Knowledge content (Confluence pages, web articles)
|
|
134
137
|
- `commands/` - Slash command markdown files
|
|
135
138
|
- `hooks/` - hooks.json manifest defining hook configurations
|
|
136
139
|
- `scripts/` - Hook scripts and utility scripts
|
|
137
140
|
|
|
141
|
+
- **Non-Plugin Structure** (one-off usage outside a plugin):
|
|
142
|
+
- `.claude/skills/` - All KB files stored here
|
|
143
|
+
- `.claude/skills/<kb-name>/manifest.json` - KB manifest
|
|
144
|
+
- `.claude/skills/<kb-name>/SKILL.md` - Skill definition
|
|
145
|
+
- `.claude/skills/<kb-name>/*.md` - Knowledge content
|
|
146
|
+
|
|
138
147
|
- **Global Configuration**:
|
|
139
148
|
- `~/.aircana/` - Global Aircana configuration directory
|
|
140
149
|
- `~/.aircana/aircana.out/` - Generated templates output directory
|
|
141
|
-
- `~/.claude/skills/` - Runtime knowledge base storage
|
|
142
150
|
|
|
143
151
|
- **Knowledge Storage Architecture**:
|
|
144
|
-
- **
|
|
145
|
-
-
|
|
146
|
-
-
|
|
147
|
-
-
|
|
148
|
-
|
|
149
|
-
-
|
|
150
|
-
|
|
151
|
-
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
152
|
+
- **Plugin Mode**:
|
|
153
|
+
- Manifests: `agents/<kb-name>/manifest.json` (version controlled)
|
|
154
|
+
- SKILL.md: `skills/<kb-name>/SKILL.md` (version controlled or gitignored based on KB type)
|
|
155
|
+
- Knowledge content: `skills/<kb-name>/*.md`
|
|
156
|
+
- Remote KBs: `skills/<kb-name>/` added to .gitignore (not version controlled)
|
|
157
|
+
- Local KBs: `skills/<kb-name>/` version controlled (team collaboration)
|
|
158
|
+
- **Non-Plugin Mode**:
|
|
159
|
+
- Everything in `.claude/skills/<kb-name>/`:
|
|
160
|
+
- `manifest.json` - KB manifest
|
|
161
|
+
- `SKILL.md` - Skill definition
|
|
162
|
+
- `*.md` - Knowledge content
|
|
155
163
|
- Team members can refresh knowledge independently
|
|
156
164
|
- Format:
|
|
157
165
|
```json
|
|
@@ -232,9 +240,9 @@ end
|
|
|
232
240
|
|
|
233
241
|
**Manifest-Based Knowledge Tracking**:
|
|
234
242
|
Each knowledge base has a `manifest.json` that tracks knowledge sources:
|
|
235
|
-
-
|
|
236
|
-
-
|
|
237
|
-
-
|
|
243
|
+
- Plugin mode: Stored in `agents/<kb-name>/manifest.json` (version controlled)
|
|
244
|
+
- Non-plugin mode: Stored in `.claude/skills/<kb-name>/manifest.json`
|
|
245
|
+
- Contains KB type (remote/local), source URLs, Confluence labels
|
|
238
246
|
- Team members run `aircana kb refresh` to sync remote knowledge locally
|
|
239
247
|
|
|
240
248
|
**Plugin-Aware Path Resolution**:
|
|
@@ -278,6 +286,5 @@ Knowledge bases can sync content from multiple sources:
|
|
|
278
286
|
- Manifest schema version 1.0
|
|
279
287
|
- `aircana kb refresh <kb-name>` refreshes all sources (Confluence + web) for remote KBs
|
|
280
288
|
- `aircana kb refresh-all` refreshes all configured remote knowledge bases
|
|
281
|
-
-
|
|
282
|
-
-
|
|
283
|
-
- Knowledge paths referenced in skill files use tilde notation: `~/.claude/skills/.../`
|
|
289
|
+
- **Plugin mode**: KB content stored in `skills/<kb-name>/`
|
|
290
|
+
- **Non-plugin mode**: KB content stored in `.claude/skills/<kb-name>/`
|
|
@@ -57,10 +57,10 @@ module Aircana
|
|
|
57
57
|
Aircana.configuration.instance_variable_set(:@plugin_manifest_dir,
|
|
58
58
|
File.join(target_dir, ".claude-plugin"))
|
|
59
59
|
Aircana.configuration.instance_variable_set(:@commands_dir, File.join(target_dir, "commands"))
|
|
60
|
-
Aircana.configuration.instance_variable_set(:@
|
|
60
|
+
Aircana.configuration.instance_variable_set(:@skills_dir, File.join(target_dir, "skills"))
|
|
61
|
+
Aircana.configuration.instance_variable_set(:@kb_knowledge_dir, File.join(target_dir, "skills"))
|
|
61
62
|
Aircana.configuration.instance_variable_set(:@hooks_dir, File.join(target_dir, "hooks"))
|
|
62
63
|
Aircana.configuration.instance_variable_set(:@scripts_dir, File.join(target_dir, "scripts"))
|
|
63
|
-
Aircana.configuration.instance_variable_set(:@agent_knowledge_dir, File.join(target_dir, "agents"))
|
|
64
64
|
|
|
65
65
|
yield
|
|
66
66
|
ensure
|
|
@@ -71,11 +71,17 @@ module Aircana
|
|
|
71
71
|
File.join(original_plugin_root, ".claude-plugin"))
|
|
72
72
|
Aircana.configuration.instance_variable_set(:@commands_dir,
|
|
73
73
|
File.join(original_plugin_root, "commands"))
|
|
74
|
-
|
|
74
|
+
# Restore skills_dir based on whether original_plugin_root is a plugin
|
|
75
|
+
original_plugin_mode = File.exist?(File.join(original_plugin_root, ".claude-plugin", "plugin.json"))
|
|
76
|
+
original_skills_dir = if original_plugin_mode
|
|
77
|
+
File.join(original_plugin_root, "skills")
|
|
78
|
+
else
|
|
79
|
+
File.join(original_plugin_root, ".claude", "skills")
|
|
80
|
+
end
|
|
81
|
+
Aircana.configuration.instance_variable_set(:@skills_dir, original_skills_dir)
|
|
82
|
+
Aircana.configuration.instance_variable_set(:@kb_knowledge_dir, original_skills_dir)
|
|
75
83
|
Aircana.configuration.instance_variable_set(:@hooks_dir, File.join(original_plugin_root, "hooks"))
|
|
76
84
|
Aircana.configuration.instance_variable_set(:@scripts_dir, File.join(original_plugin_root, "scripts"))
|
|
77
|
-
Aircana.configuration.instance_variable_set(:@agent_knowledge_dir,
|
|
78
|
-
File.join(original_plugin_root, "agents"))
|
|
79
85
|
end
|
|
80
86
|
end
|
|
81
87
|
|
|
@@ -109,7 +115,7 @@ module Aircana
|
|
|
109
115
|
|
|
110
116
|
def create_plugin_structure(target_dir)
|
|
111
117
|
# Create plugin directories
|
|
112
|
-
[".claude-plugin", "commands", "agents", "hooks", "scripts"].each do |dir|
|
|
118
|
+
[".claude-plugin", "commands", "agents", "skills", "hooks", "scripts"].each do |dir|
|
|
113
119
|
dir_path = File.join(target_dir, dir)
|
|
114
120
|
Aircana.create_dir_if_needed(dir_path)
|
|
115
121
|
Aircana.human_logger.info("Created directory: #{dir}/")
|
|
@@ -237,7 +243,8 @@ module Aircana
|
|
|
237
243
|
Aircana.human_logger.info("\nPlugin structure:")
|
|
238
244
|
Aircana.human_logger.info(" .claude-plugin/plugin.json - Plugin metadata")
|
|
239
245
|
Aircana.human_logger.info(" commands/ - Slash commands")
|
|
240
|
-
Aircana.human_logger.info(" agents/ - Knowledge
|
|
246
|
+
Aircana.human_logger.info(" agents/ - Knowledge base manifests")
|
|
247
|
+
Aircana.human_logger.info(" skills/ - Knowledge base SKILL.md files")
|
|
241
248
|
Aircana.human_logger.info(" hooks/ - Event hook configurations")
|
|
242
249
|
Aircana.human_logger.info(" scripts/ - Hook scripts and utilities")
|
|
243
250
|
Aircana.human_logger.info("\nNext steps:")
|
|
@@ -221,25 +221,17 @@ module Aircana
|
|
|
221
221
|
end
|
|
222
222
|
# rubocop:enable Metrics/AbcSize, Metrics/MethodLength
|
|
223
223
|
|
|
224
|
-
|
|
225
|
-
def regenerate_skill_md(kb_name, short_description = nil)
|
|
224
|
+
def regenerate_skill_md(kb_name, _short_description = nil)
|
|
226
225
|
return unless Aircana::Contexts::Manifest.manifest_exists?(kb_name)
|
|
227
226
|
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
kb_name: kb_name,
|
|
231
|
-
short_description: short_description
|
|
232
|
-
)
|
|
233
|
-
else
|
|
234
|
-
Generators::SkillsGenerator.from_manifest(kb_name)
|
|
235
|
-
end
|
|
227
|
+
# Always use from_manifest when manifest exists to ensure knowledge_files are loaded
|
|
228
|
+
generator = Generators::SkillsGenerator.from_manifest(kb_name)
|
|
236
229
|
|
|
237
230
|
generator.generate
|
|
238
231
|
Aircana.human_logger.success "Generated SKILL.md for '#{kb_name}'"
|
|
239
232
|
rescue StandardError => e
|
|
240
233
|
Aircana.human_logger.warn "Failed to generate SKILL.md: #{e.message}"
|
|
241
234
|
end
|
|
242
|
-
# rubocop:enable Metrics/MethodLength
|
|
243
235
|
|
|
244
236
|
def ensure_gitignore_entry(kb_type)
|
|
245
237
|
gitignore_path = gitignore_file_path
|
|
@@ -284,11 +276,21 @@ module Aircana
|
|
|
284
276
|
end
|
|
285
277
|
|
|
286
278
|
def remote_knowledge_pattern
|
|
287
|
-
|
|
279
|
+
# Pattern depends on whether we're in a plugin
|
|
280
|
+
if Aircana.configuration.plugin_mode?
|
|
281
|
+
"skills/*/*.md"
|
|
282
|
+
else
|
|
283
|
+
".claude/skills/*/*.md"
|
|
284
|
+
end
|
|
288
285
|
end
|
|
289
286
|
|
|
290
287
|
def local_knowledge_negation_pattern
|
|
291
|
-
|
|
288
|
+
# Negation pattern depends on whether we're in a plugin
|
|
289
|
+
if Aircana.configuration.plugin_mode?
|
|
290
|
+
"!skills/*/*.md"
|
|
291
|
+
else
|
|
292
|
+
"!.claude/skills/*/*.md"
|
|
293
|
+
end
|
|
292
294
|
end
|
|
293
295
|
|
|
294
296
|
def gitignore_has_pattern?(gitignore_path, pattern)
|
|
@@ -69,17 +69,28 @@ module Aircana
|
|
|
69
69
|
@output_dir = File.join(@global_dir, "aircana.out")
|
|
70
70
|
end
|
|
71
71
|
|
|
72
|
+
# rubocop:disable Metrics/MethodLength
|
|
72
73
|
def setup_plugin_paths
|
|
73
74
|
# Plugin root can be set via AIRCANA_PLUGIN_ROOT (for hooks) or CLAUDE_PLUGIN_ROOT,
|
|
74
75
|
# otherwise defaults to the current project directory
|
|
75
76
|
@plugin_root = ENV.fetch("AIRCANA_PLUGIN_ROOT", ENV.fetch("CLAUDE_PLUGIN_ROOT", @project_dir))
|
|
76
77
|
@plugin_manifest_dir = File.join(@plugin_root, ".claude-plugin")
|
|
77
78
|
@commands_dir = File.join(@plugin_root, "commands")
|
|
78
|
-
|
|
79
|
+
|
|
80
|
+
# Skills directory location depends on whether we're in a plugin
|
|
81
|
+
# Plugin mode: skills/ (Claude Code standard location)
|
|
82
|
+
# Non-plugin mode: .claude/skills/ (local development/one-off usage)
|
|
83
|
+
@skills_dir = if plugin_mode?
|
|
84
|
+
File.join(@plugin_root, "skills")
|
|
85
|
+
else
|
|
86
|
+
File.join(@plugin_root, ".claude", "skills")
|
|
87
|
+
end
|
|
88
|
+
|
|
79
89
|
@hooks_dir = File.join(@plugin_root, "hooks")
|
|
80
90
|
@scripts_dir = File.join(@plugin_root, "scripts")
|
|
81
91
|
@kb_knowledge_dir = @skills_dir
|
|
82
92
|
end
|
|
93
|
+
# rubocop:enable Metrics/MethodLength
|
|
83
94
|
|
|
84
95
|
def setup_claude_code_paths
|
|
85
96
|
@claude_code_config_path = File.join(Dir.home, ".claude")
|
|
@@ -101,10 +101,12 @@ module Aircana
|
|
|
101
101
|
def extract_page_metadata(page)
|
|
102
102
|
content = page&.dig("body", "storage", "value") || ""
|
|
103
103
|
markdown_content = convert_to_markdown(content)
|
|
104
|
-
|
|
104
|
+
title = page["title"] || "Confluence page"
|
|
105
|
+
summary = generate_summary(markdown_content, title)
|
|
105
106
|
|
|
106
107
|
{
|
|
107
108
|
"id" => page["id"],
|
|
109
|
+
"title" => title,
|
|
108
110
|
"summary" => summary
|
|
109
111
|
}
|
|
110
112
|
end
|
|
@@ -154,6 +154,8 @@ module Aircana
|
|
|
154
154
|
raise ManifestError, "Page entry missing required field: id" unless page_entry.key?("id")
|
|
155
155
|
|
|
156
156
|
raise ManifestError, "Page entry missing required field: summary" unless page_entry.key?("summary")
|
|
157
|
+
|
|
158
|
+
# Title is optional for backward compatibility with existing manifests
|
|
157
159
|
end
|
|
158
160
|
|
|
159
161
|
def validate_web_source(source)
|
|
@@ -120,7 +120,14 @@ module Aircana
|
|
|
120
120
|
case source["type"]
|
|
121
121
|
when "confluence"
|
|
122
122
|
source["pages"]&.each do |page|
|
|
123
|
+
# Match by page ID (for old manifests) or by sanitized title (for new manifests)
|
|
123
124
|
return page["summary"] if filename.include?(page["id"])
|
|
125
|
+
|
|
126
|
+
# Try matching by sanitized title if available
|
|
127
|
+
if page["title"]
|
|
128
|
+
sanitized_title = sanitize_filename(page["title"])
|
|
129
|
+
return page["summary"] if filename.include?(sanitized_title)
|
|
130
|
+
end
|
|
124
131
|
end
|
|
125
132
|
when "web"
|
|
126
133
|
source["urls"]&.each do |url_entry|
|
|
@@ -135,6 +142,20 @@ module Aircana
|
|
|
135
142
|
# rubocop:enable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/MethodLength
|
|
136
143
|
# rubocop:enable Metrics/PerceivedComplexity
|
|
137
144
|
|
|
145
|
+
def self.sanitize_filename(title)
|
|
146
|
+
# Match the sanitization logic in Local#sanitize_filename
|
|
147
|
+
sanitized = title.strip
|
|
148
|
+
.gsub(%r{[<>:"/\\|?*]}, "-")
|
|
149
|
+
.gsub(/\s+/, "-")
|
|
150
|
+
.gsub(/-+/, "-")
|
|
151
|
+
.gsub(/^-|-$/, "")
|
|
152
|
+
|
|
153
|
+
sanitized = "untitled" if sanitized.empty?
|
|
154
|
+
sanitized = sanitized[0, 200] if sanitized.length > 200
|
|
155
|
+
|
|
156
|
+
sanitized
|
|
157
|
+
end
|
|
158
|
+
|
|
138
159
|
def self.generate_skill_description_from_manifest(manifest, kb_name)
|
|
139
160
|
# Generate a description optimized for Claude's skill discovery
|
|
140
161
|
source_count = manifest["sources"]&.size || 0
|
data/lib/aircana/version.rb
CHANGED