@slycode/slycode 0.1.18 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (89) hide show
  1. package/dist/web/.next/BUILD_ID +1 -1
  2. package/dist/web/.next/build-manifest.json +2 -2
  3. package/dist/web/.next/server/app/_global-error.html +2 -2
  4. package/dist/web/.next/server/app/_global-error.rsc +1 -1
  5. package/dist/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  6. package/dist/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  7. package/dist/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  8. package/dist/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  9. package/dist/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  10. package/dist/web/.next/server/app/_not-found.html +1 -1
  11. package/dist/web/.next/server/app/_not-found.rsc +1 -1
  12. package/dist/web/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
  13. package/dist/web/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  14. package/dist/web/.next/server/app/_not-found.segments/_index.segment.rsc +1 -1
  15. package/dist/web/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  16. package/dist/web/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  17. package/dist/web/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  18. package/dist/web/.next/server/app/page_client-reference-manifest.js +1 -1
  19. package/dist/web/.next/server/app/project/[id]/page_client-reference-manifest.js +1 -1
  20. package/dist/web/.next/server/chunks/[root-of-the-server]__46b023d4._.js +1 -1
  21. package/dist/web/.next/server/chunks/[root-of-the-server]__4c7995bf._.js +1 -1
  22. package/dist/web/.next/server/chunks/[root-of-the-server]__4d0d3464._.js +1 -1
  23. package/dist/web/.next/server/chunks/[root-of-the-server]__543058c2._.js +3 -3
  24. package/dist/web/.next/server/chunks/[root-of-the-server]__6d330d40._.js +1 -1
  25. package/dist/web/.next/server/chunks/[root-of-the-server]__884d73e4._.js +1 -1
  26. package/dist/web/.next/server/chunks/[root-of-the-server]__949bb248._.js +1 -1
  27. package/dist/web/.next/server/chunks/[root-of-the-server]__949d814c._.js +1 -1
  28. package/dist/web/.next/server/chunks/[root-of-the-server]__aa814a86._.js +1 -1
  29. package/dist/web/.next/server/chunks/[root-of-the-server]__ad64e04f._.js +2 -2
  30. package/dist/web/.next/server/chunks/[root-of-the-server]__baa99257._.js +1 -1
  31. package/dist/web/.next/server/chunks/[root-of-the-server]__bbb4b3ac._.js +1 -1
  32. package/dist/web/.next/server/chunks/[root-of-the-server]__bf286c26._.js +1 -1
  33. package/dist/web/.next/server/chunks/[root-of-the-server]__ce429522._.js +1 -1
  34. package/dist/web/.next/server/chunks/[root-of-the-server]__d38c7a96._.js +1 -1
  35. package/dist/web/.next/server/chunks/[root-of-the-server]__e9b0e744._.js +1 -1
  36. package/dist/web/.next/server/chunks/[root-of-the-server]__f1fe18e6._.js +2 -2
  37. package/dist/web/.next/server/chunks/ssr/[root-of-the-server]__677b7660._.js +1 -1
  38. package/dist/web/.next/server/chunks/ssr/[root-of-the-server]__79c0188d._.js +1 -1
  39. package/dist/web/.next/server/chunks/ssr/src_lib_registry_ts_2fc87c9c._.js +1 -1
  40. package/dist/web/.next/server/pages/404.html +1 -1
  41. package/dist/web/.next/server/pages/500.html +2 -2
  42. package/dist/web/.next/static/chunks/7660448872d80e27.js +4 -0
  43. package/dist/web/.next/static/chunks/{4793f1f83885d568.js → b694f741bb34ac84.js} +1 -1
  44. package/dist/web/src/components/ClaudeTerminalPanel.tsx +15 -11
  45. package/dist/web/src/lib/store-scanner.ts +70 -10
  46. package/dist/web/tsconfig.tsbuildinfo +1 -1
  47. package/package.json +1 -1
  48. package/templates/kanban-seed.json +1 -1
  49. package/dist/store/.backups/actions/onboard.md +0 -33
  50. package/dist/store/.backups/actions/review.md +0 -37
  51. package/dist/store/.backups/actions/show-card.md +0 -20
  52. package/dist/store/.backups/checkpoint/SKILL.md +0 -43
  53. package/dist/store/.backups/context-priming/SKILL.md +0 -153
  54. package/dist/store/.backups/context-priming/references/area-index.md +0 -101
  55. package/dist/store/.backups/context-priming/references/areas/claude-actions.md +0 -120
  56. package/dist/store/.backups/context-priming/references/areas/messaging.md +0 -177
  57. package/dist/store/.backups/context-priming/references/areas/scripts-deployment.md +0 -138
  58. package/dist/store/.backups/context-priming/references/areas/skills.md +0 -135
  59. package/dist/store/.backups/context-priming/references/areas/terminal-bridge.md +0 -232
  60. package/dist/store/.backups/context-priming/references/areas/web-frontend.md +0 -252
  61. package/dist/store/.backups/context-priming/references/maintenance.md +0 -128
  62. package/dist/store/.ignored-updates.json +0 -37
  63. package/dist/store/actions/analyse-implementation.md +0 -72
  64. package/dist/store/actions/archive.md +0 -36
  65. package/dist/store/actions/clear.md +0 -13
  66. package/dist/store/actions/complete.md +0 -34
  67. package/dist/store/actions/continue.md +0 -20
  68. package/dist/store/agents/doc-updater.md +0 -619
  69. package/dist/store/mcp/context7.json +0 -8
  70. package/dist/store/skills/claude-code-docs-maintainer/SKILL.md +0 -168
  71. package/dist/store/skills/create-command/SKILL.md +0 -92
  72. package/dist/store/skills/doc-discovery/SKILL.md +0 -18
  73. package/dist/store/skills/doc-update/SKILL.md +0 -15
  74. package/dist/store/skills/dummy/SKILL.md +0 -22
  75. package/dist/store/skills/interactive-explainer/SKILL.md +0 -557
  76. package/dist/store/skills/interactive-explainer/assets/base_template.html +0 -780
  77. package/dist/store/skills/interactive-explainer/references/design_patterns.md +0 -486
  78. package/dist/store/skills/interactive-explainer/references/visualization_libraries.md +0 -512
  79. package/dist/store/skills/problem_summary/SKILL.md +0 -11
  80. package/dist/store/skills/reference-fetch/SKILL.md +0 -206
  81. package/dist/store/skills/skill-creator/LICENSE.txt +0 -202
  82. package/dist/store/skills/skill-creator/SKILL.md +0 -246
  83. package/dist/store/skills/skill-creator/scripts/init_skill.py +0 -303
  84. package/dist/store/skills/skill-creator/scripts/package_skill.py +0 -110
  85. package/dist/store/skills/skill-creator/scripts/quick_validate.py +0 -65
  86. package/dist/web/.next/static/chunks/5b44413f6e5b9e66.js +0 -4
  87. /package/dist/web/.next/static/{heUrgyJAcziZUlrZpGOPA → BbBq5FNe-sYRKe8Pc24UW}/_buildManifest.js +0 -0
  88. /package/dist/web/.next/static/{heUrgyJAcziZUlrZpGOPA → BbBq5FNe-sYRKe8Pc24UW}/_clientMiddlewareManifest.json +0 -0
  89. /package/dist/web/.next/static/{heUrgyJAcziZUlrZpGOPA → BbBq5FNe-sYRKe8Pc24UW}/_ssgManifest.js +0 -0
@@ -179,17 +179,6 @@ export function ClaudeTerminalPanel({
179
179
  .catch(() => { /* providers.json not available, use defaults */ });
180
180
  }, [stage]);
181
181
 
182
- // Check for missing instruction file when provider or cwd changes
183
- useEffect(() => {
184
- if (!cwd || !selectedProvider) return;
185
- setInstructionFileCheck(null);
186
- setCreateInstructionFile(true);
187
- fetch(`${bridgeUrl}/check-instruction-file?provider=${selectedProvider}&cwd=${encodeURIComponent(cwd)}`)
188
- .then(res => res.ok ? res.json() : null)
189
- .then(data => { if (data) setInstructionFileCheck(data); })
190
- .catch(() => { /* ignore — non-critical */ });
191
- }, [selectedProvider, cwd, bridgeUrl]);
192
-
193
182
  // Persist provider default to /api/providers (fire-and-forget)
194
183
  const saveProviderDefault = useCallback((provider: string, skip: boolean) => {
195
184
  const defaultVal = { provider, skipPermissions: skip };
@@ -206,6 +195,17 @@ export function ClaudeTerminalPanel({
206
195
  const isRunning = sessionInfo?.status === 'running' || sessionInfo?.status === 'detached';
207
196
  const hasHistory = sessionInfo?.hasHistory;
208
197
 
198
+ // Check for missing instruction file when provider/cwd changes or session stops
199
+ useEffect(() => {
200
+ if (!cwd || !selectedProvider) return;
201
+ setInstructionFileCheck(null);
202
+ setCreateInstructionFile(true);
203
+ fetch(`${bridgeUrl}/check-instruction-file?provider=${selectedProvider}&cwd=${encodeURIComponent(cwd)}`)
204
+ .then(res => res.ok ? res.json() : null)
205
+ .then(data => { if (data) setInstructionFileCheck(data); })
206
+ .catch(() => { /* ignore — non-critical */ });
207
+ }, [selectedProvider, cwd, bridgeUrl, isRunning]);
208
+
209
209
  // Fetch session info
210
210
  const fetchSessionInfo = useCallback(async (signal?: AbortSignal) => {
211
211
  try {
@@ -321,6 +321,10 @@ export function ClaudeTerminalPanel({
321
321
  onSessionChange?.(data);
322
322
  setShowTerminal(true);
323
323
  setTerminalKey((k) => k + 1);
324
+ // File was created at session start — clear the warning
325
+ if (instructionFileCheck?.needed && createInstructionFile) {
326
+ setInstructionFileCheck(null);
327
+ }
324
328
  }
325
329
  } catch (err) {
326
330
  console.error('Failed to start session:', err);
@@ -17,6 +17,36 @@ function getStorePath(): string {
17
17
  return path.join(getSlycodeRoot(), 'store');
18
18
  }
19
19
 
20
+ /** Load manifest lists. Returns null if manifest not found. */
21
+ function loadManifest(): { skills: string[]; actions: string[]; agents: string[]; mcp: string[] } | null {
22
+ // Try multiple locations: dev repo, then package dist
23
+ const candidates = [
24
+ path.join(getSlycodeRoot(), 'build', 'store-manifest.js'),
25
+ path.join(getSlycodeRoot(), 'node_modules', '@slycode', 'slycode', 'build', 'store-manifest.js'),
26
+ ];
27
+ for (const p of candidates) {
28
+ try {
29
+ if (fs.existsSync(p)) {
30
+ // Use dynamic import workaround — read and parse manually to avoid require()
31
+ const content = fs.readFileSync(p, 'utf-8');
32
+ const mod: Record<string, unknown> = {};
33
+ const fn = new Function('module', 'exports', content);
34
+ fn(mod, mod);
35
+ const result = (mod as { exports?: { skills?: string[]; actions?: string[]; agents?: string[]; mcp?: string[] } }).exports;
36
+ if (result?.skills) return {
37
+ skills: result.skills,
38
+ actions: result.actions || [],
39
+ agents: result.agents || [],
40
+ mcp: result.mcp || [],
41
+ };
42
+ }
43
+ } catch {
44
+ // Try next candidate
45
+ }
46
+ }
47
+ return null;
48
+ }
49
+
20
50
  // ============================================================================
21
51
  // Store Directory Scanning
22
52
  // ============================================================================
@@ -124,26 +154,56 @@ function scanStoreMcp(storePath: string): StoreAssetInfo[] {
124
154
  // ============================================================================
125
155
 
126
156
  /**
127
- * Full store scan — returns all assets from the flat canonical store.
157
+ * Full store scan — returns only manifest-approved assets.
128
158
  */
129
159
  export function scanStore(): StoreData {
130
160
  const storePath = getStorePath();
161
+ const manifest = loadManifest();
162
+
163
+ let skills = scanStoreAssetDir(storePath, 'skill');
164
+ let agents = scanStoreAssetDir(storePath, 'agent');
165
+ let mcp = scanStoreMcp(storePath);
131
166
 
132
- return {
133
- skills: scanStoreAssetDir(storePath, 'skill'),
134
- agents: scanStoreAssetDir(storePath, 'agent'),
135
- mcp: scanStoreMcp(storePath),
136
- };
167
+ if (manifest) {
168
+ if (manifest.skills) {
169
+ const allowed = new Set(manifest.skills);
170
+ skills = skills.filter(s => allowed.has(s.name));
171
+ }
172
+ if (manifest.agents) {
173
+ const allowed = new Set(manifest.agents);
174
+ agents = agents.filter(a => allowed.has(a.name));
175
+ }
176
+ if (manifest.mcp) {
177
+ const allowed = new Set(manifest.mcp);
178
+ mcp = mcp.filter(m => allowed.has(m.name));
179
+ }
180
+ }
181
+
182
+ return { skills, agents, mcp };
137
183
  }
138
184
 
139
185
  /**
140
186
  * Get flat list of all store assets (skills + agents).
141
187
  * Used as the master source for project matrix comparison.
188
+ * Skills are filtered by manifest.
142
189
  */
143
190
  export function getStoreAssets(): StoreAssetInfo[] {
144
191
  const storePath = getStorePath();
145
- return [
146
- ...scanStoreAssetDir(storePath, 'skill'),
147
- ...scanStoreAssetDir(storePath, 'agent'),
148
- ];
192
+ const manifest = loadManifest();
193
+
194
+ let skills = scanStoreAssetDir(storePath, 'skill');
195
+ let agents = scanStoreAssetDir(storePath, 'agent');
196
+
197
+ if (manifest) {
198
+ if (manifest.skills) {
199
+ const allowed = new Set(manifest.skills);
200
+ skills = skills.filter(s => allowed.has(s.name));
201
+ }
202
+ if (manifest.agents) {
203
+ const allowed = new Set(manifest.agents);
204
+ agents = agents.filter(a => allowed.has(a.name));
205
+ }
206
+ }
207
+
208
+ return [...skills, ...agents];
149
209
  }