@archznn/crewloop-skills 0.4.0 → 0.4.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (132) hide show
  1. package/package.json +18 -3
  2. package/packages/cli/README.md +55 -0
  3. package/packages/cli/bin/crewloop.js +6 -0
  4. package/packages/cli/dist/agents.d.ts +7 -0
  5. package/packages/cli/dist/agents.d.ts.map +1 -0
  6. package/packages/cli/dist/agents.js +31 -0
  7. package/packages/cli/dist/agents.js.map +1 -0
  8. package/packages/cli/dist/cli.d.ts +14 -0
  9. package/packages/cli/dist/cli.d.ts.map +1 -0
  10. package/packages/cli/dist/cli.js +283 -0
  11. package/packages/cli/dist/cli.js.map +1 -0
  12. package/packages/cli/dist/installer.d.ts +19 -0
  13. package/packages/cli/dist/installer.d.ts.map +1 -0
  14. package/packages/cli/dist/installer.js +89 -0
  15. package/packages/cli/dist/installer.js.map +1 -0
  16. package/packages/cli/dist/mcp.d.ts +20 -0
  17. package/packages/cli/dist/mcp.d.ts.map +1 -0
  18. package/packages/cli/dist/mcp.js +130 -0
  19. package/packages/cli/dist/mcp.js.map +1 -0
  20. package/packages/cli/dist/resolver.d.ts +7 -0
  21. package/packages/cli/dist/resolver.d.ts.map +1 -0
  22. package/packages/cli/dist/resolver.js +57 -0
  23. package/packages/cli/dist/resolver.js.map +1 -0
  24. package/packages/cli/dist/tests/agents.test.d.ts +2 -0
  25. package/packages/cli/dist/tests/agents.test.d.ts.map +1 -0
  26. package/packages/cli/dist/tests/agents.test.js +27 -0
  27. package/packages/cli/dist/tests/agents.test.js.map +1 -0
  28. package/packages/cli/dist/tests/cli.test.d.ts +2 -0
  29. package/packages/cli/dist/tests/cli.test.d.ts.map +1 -0
  30. package/packages/cli/dist/tests/cli.test.js +103 -0
  31. package/packages/cli/dist/tests/cli.test.js.map +1 -0
  32. package/packages/cli/dist/tests/installer.test.d.ts +2 -0
  33. package/packages/cli/dist/tests/installer.test.d.ts.map +1 -0
  34. package/packages/cli/dist/tests/installer.test.js +129 -0
  35. package/packages/cli/dist/tests/installer.test.js.map +1 -0
  36. package/packages/cli/dist/tests/mcp.test.d.ts +2 -0
  37. package/packages/cli/dist/tests/mcp.test.d.ts.map +1 -0
  38. package/packages/cli/dist/tests/mcp.test.js +153 -0
  39. package/packages/cli/dist/tests/mcp.test.js.map +1 -0
  40. package/packages/cli/dist/tests/resolver.test.d.ts +2 -0
  41. package/packages/cli/dist/tests/resolver.test.d.ts.map +1 -0
  42. package/packages/cli/dist/tests/resolver.test.js +41 -0
  43. package/packages/cli/dist/tests/resolver.test.js.map +1 -0
  44. package/servers/dashboard/bin/crewloop-dashboard.js +0 -0
  45. package/servers/dashboard/dist/adapters/codex.d.ts +23 -0
  46. package/servers/dashboard/dist/adapters/codex.d.ts.map +1 -0
  47. package/servers/dashboard/dist/adapters/codex.js +28 -0
  48. package/servers/dashboard/dist/adapters/codex.js.map +1 -0
  49. package/servers/dashboard/dist/adapters/kimi.d.ts +13 -0
  50. package/servers/dashboard/dist/adapters/kimi.d.ts.map +1 -0
  51. package/servers/dashboard/dist/adapters/kimi.js +28 -0
  52. package/servers/dashboard/dist/adapters/kimi.js.map +1 -0
  53. package/servers/dashboard/dist/adapters/opencode.d.ts +9 -0
  54. package/servers/dashboard/dist/adapters/opencode.d.ts.map +1 -0
  55. package/servers/dashboard/dist/adapters/opencode.js +26 -0
  56. package/servers/dashboard/dist/adapters/opencode.js.map +1 -0
  57. package/servers/dashboard/dist/adapters/shim.d.ts +7 -0
  58. package/servers/dashboard/dist/adapters/shim.d.ts.map +1 -0
  59. package/servers/dashboard/dist/adapters/shim.js +107 -0
  60. package/servers/dashboard/dist/adapters/shim.js.map +1 -0
  61. package/servers/dashboard/dist/adapters/shim.test.d.ts +2 -0
  62. package/servers/dashboard/dist/adapters/shim.test.d.ts.map +1 -0
  63. package/servers/dashboard/dist/adapters/shim.test.js +72 -0
  64. package/servers/dashboard/dist/adapters/shim.test.js.map +1 -0
  65. package/servers/dashboard/dist/api/event.d.ts +13 -0
  66. package/servers/dashboard/dist/api/event.d.ts.map +1 -0
  67. package/servers/dashboard/dist/api/event.js +52 -0
  68. package/servers/dashboard/dist/api/event.js.map +1 -0
  69. package/servers/dashboard/dist/api/skills.d.ts +4 -0
  70. package/servers/dashboard/dist/api/skills.d.ts.map +1 -0
  71. package/servers/dashboard/dist/api/skills.js +12 -0
  72. package/servers/dashboard/dist/api/skills.js.map +1 -0
  73. package/servers/dashboard/dist/config.d.ts +11 -0
  74. package/servers/dashboard/dist/config.d.ts.map +1 -0
  75. package/servers/dashboard/dist/config.js +65 -0
  76. package/servers/dashboard/dist/config.js.map +1 -0
  77. package/servers/dashboard/dist/filters/sanitize.d.ts +14 -0
  78. package/servers/dashboard/dist/filters/sanitize.d.ts.map +1 -0
  79. package/servers/dashboard/dist/filters/sanitize.js +64 -0
  80. package/servers/dashboard/dist/filters/sanitize.js.map +1 -0
  81. package/servers/dashboard/dist/filters/sanitize.test.d.ts +2 -0
  82. package/servers/dashboard/dist/filters/sanitize.test.d.ts.map +1 -0
  83. package/servers/dashboard/dist/filters/sanitize.test.js +71 -0
  84. package/servers/dashboard/dist/filters/sanitize.test.js.map +1 -0
  85. package/servers/dashboard/dist/index.d.ts +2 -0
  86. package/servers/dashboard/dist/index.d.ts.map +1 -0
  87. package/servers/dashboard/dist/index.js +22 -0
  88. package/servers/dashboard/dist/index.js.map +1 -0
  89. package/servers/dashboard/dist/presenter.d.ts +7 -0
  90. package/servers/dashboard/dist/presenter.d.ts.map +1 -0
  91. package/servers/dashboard/dist/presenter.js +54 -0
  92. package/servers/dashboard/dist/presenter.js.map +1 -0
  93. package/servers/dashboard/dist/presenter.test.d.ts +2 -0
  94. package/servers/dashboard/dist/presenter.test.d.ts.map +1 -0
  95. package/servers/dashboard/dist/presenter.test.js +66 -0
  96. package/servers/dashboard/dist/presenter.test.js.map +1 -0
  97. package/servers/dashboard/dist/server.d.ts +13 -0
  98. package/servers/dashboard/dist/server.d.ts.map +1 -0
  99. package/servers/dashboard/dist/server.js +162 -0
  100. package/servers/dashboard/dist/server.js.map +1 -0
  101. package/servers/dashboard/dist/server.test.d.ts +2 -0
  102. package/servers/dashboard/dist/server.test.d.ts.map +1 -0
  103. package/servers/dashboard/dist/server.test.js +113 -0
  104. package/servers/dashboard/dist/server.test.js.map +1 -0
  105. package/servers/dashboard/dist/skills/infer.d.ts +8 -0
  106. package/servers/dashboard/dist/skills/infer.d.ts.map +1 -0
  107. package/servers/dashboard/dist/skills/infer.js +48 -0
  108. package/servers/dashboard/dist/skills/infer.js.map +1 -0
  109. package/servers/dashboard/dist/skills/infer.test.d.ts +2 -0
  110. package/servers/dashboard/dist/skills/infer.test.d.ts.map +1 -0
  111. package/servers/dashboard/dist/skills/infer.test.js +82 -0
  112. package/servers/dashboard/dist/skills/infer.test.js.map +1 -0
  113. package/servers/dashboard/dist/skills/mapping.d.ts +5 -0
  114. package/servers/dashboard/dist/skills/mapping.d.ts.map +1 -0
  115. package/servers/dashboard/dist/skills/mapping.js +28 -0
  116. package/servers/dashboard/dist/skills/mapping.js.map +1 -0
  117. package/servers/dashboard/dist/skills/registry.d.ts +11 -0
  118. package/servers/dashboard/dist/skills/registry.d.ts.map +1 -0
  119. package/servers/dashboard/dist/skills/registry.js +59 -0
  120. package/servers/dashboard/dist/skills/registry.js.map +1 -0
  121. package/servers/dashboard/dist/state.d.ts +18 -0
  122. package/servers/dashboard/dist/state.d.ts.map +1 -0
  123. package/servers/dashboard/dist/state.js +91 -0
  124. package/servers/dashboard/dist/state.js.map +1 -0
  125. package/servers/dashboard/dist/state.test.d.ts +2 -0
  126. package/servers/dashboard/dist/state.test.d.ts.map +1 -0
  127. package/servers/dashboard/dist/state.test.js +83 -0
  128. package/servers/dashboard/dist/state.test.js.map +1 -0
  129. package/servers/dashboard/dist/types.d.ts +86 -0
  130. package/servers/dashboard/dist/types.d.ts.map +1 -0
  131. package/servers/dashboard/dist/types.js +3 -0
  132. package/servers/dashboard/dist/types.js.map +1 -0
@@ -0,0 +1,91 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.StateStore = void 0;
4
+ class StateStore {
5
+ sessions = new Map();
6
+ options;
7
+ constructor(options) {
8
+ this.options = options;
9
+ }
10
+ applyEvent(event) {
11
+ let session = this.sessions.get(event.session_id);
12
+ if (!session) {
13
+ session = this.createSession(event.session_id, event.source);
14
+ }
15
+ session.source = event.source;
16
+ session.last_event_at = event.timestamp;
17
+ session.events.unshift(event);
18
+ if (session.events.length > this.options.maxEventsPerSession) {
19
+ session.events.length = this.options.maxEventsPerSession;
20
+ }
21
+ if (event.tool) {
22
+ session.tool_counts[event.tool] = (session.tool_counts[event.tool] || 0) + 1;
23
+ }
24
+ if (event.skill) {
25
+ session.active_skill = event.skill;
26
+ session.active_confidence = event.event_type === 'skill_change' ? 'explicit' : 'heuristic';
27
+ }
28
+ session.status = deriveSessionStatus(event);
29
+ this.sessions.set(event.session_id, session);
30
+ return session;
31
+ }
32
+ setActiveSkill(sessionId, skill, confidence) {
33
+ const session = this.sessions.get(sessionId);
34
+ if (!session) {
35
+ return undefined;
36
+ }
37
+ session.active_skill = skill;
38
+ session.active_confidence = confidence;
39
+ return session;
40
+ }
41
+ getSession(id) {
42
+ return this.sessions.get(id);
43
+ }
44
+ getAllSessions() {
45
+ return Array.from(this.sessions.values()).sort((a, b) => b.last_event_at - a.last_event_at);
46
+ }
47
+ getState() {
48
+ return {
49
+ sessions: Object.fromEntries(this.sessions),
50
+ };
51
+ }
52
+ pruneInactive(now = Date.now()) {
53
+ let removed = 0;
54
+ for (const [id, session] of this.sessions) {
55
+ if (now - session.last_event_at > this.options.sessionMaxAgeMs) {
56
+ this.sessions.delete(id);
57
+ removed++;
58
+ }
59
+ }
60
+ return removed;
61
+ }
62
+ createSession(id, source) {
63
+ const now = Date.now();
64
+ const session = {
65
+ id,
66
+ source,
67
+ events: [],
68
+ tool_counts: {},
69
+ started_at: now,
70
+ last_event_at: now,
71
+ };
72
+ this.sessions.set(id, session);
73
+ return session;
74
+ }
75
+ }
76
+ exports.StateStore = StateStore;
77
+ function deriveSessionStatus(event) {
78
+ switch (event.event_type) {
79
+ case 'session_start':
80
+ case 'tool_start':
81
+ case 'skill_change':
82
+ return 'running';
83
+ case 'tool_end':
84
+ return event.status || 'success';
85
+ case 'session_end':
86
+ return 'success';
87
+ default:
88
+ return undefined;
89
+ }
90
+ }
91
+ //# sourceMappingURL=state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state.js","sourceRoot":"","sources":["../src/state.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=state.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state.test.d.ts","sourceRoot":"","sources":["../src/state.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,83 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const node_test_1 = require("node:test");
7
+ const strict_1 = __importDefault(require("node:assert/strict"));
8
+ const state_1 = require("./state");
9
+ function makeEvent(overrides = {}) {
10
+ return {
11
+ id: 'ev-1',
12
+ timestamp: Date.now(),
13
+ source: 'kimi',
14
+ session_id: 'sess-1',
15
+ event_type: 'tool_start',
16
+ tool: 'Read',
17
+ ...overrides,
18
+ };
19
+ }
20
+ (0, node_test_1.describe)('StateStore', () => {
21
+ (0, node_test_1.it)('creates session on first event', () => {
22
+ const store = new state_1.StateStore({ maxEventsPerSession: 10, sessionMaxAgeMs: 60000 });
23
+ const session = store.applyEvent(makeEvent());
24
+ strict_1.default.equal(session.id, 'sess-1');
25
+ strict_1.default.equal(session.source, 'kimi');
26
+ strict_1.default.equal(session.events.length, 1);
27
+ });
28
+ (0, node_test_1.it)('caps events per session', () => {
29
+ const store = new state_1.StateStore({ maxEventsPerSession: 3, sessionMaxAgeMs: 60000 });
30
+ for (let i = 0; i < 5; i++) {
31
+ store.applyEvent(makeEvent({ id: `ev-${i}`, timestamp: Date.now() + i }));
32
+ }
33
+ const session = store.getSession('sess-1');
34
+ strict_1.default.equal(session.events.length, 3);
35
+ });
36
+ (0, node_test_1.it)('counts tool usage', () => {
37
+ const store = new state_1.StateStore({ maxEventsPerSession: 10, sessionMaxAgeMs: 60000 });
38
+ store.applyEvent(makeEvent({ tool: 'Read' }));
39
+ store.applyEvent(makeEvent({ tool: 'Read' }));
40
+ store.applyEvent(makeEvent({ tool: 'Edit' }));
41
+ const session = store.getSession('sess-1');
42
+ strict_1.default.equal(session.tool_counts['Read'], 2);
43
+ strict_1.default.equal(session.tool_counts['Edit'], 1);
44
+ });
45
+ (0, node_test_1.it)('sets active skill when event carries skill', () => {
46
+ const store = new state_1.StateStore({ maxEventsPerSession: 10, sessionMaxAgeMs: 60000 });
47
+ store.applyEvent(makeEvent({ skill: 'architect', event_type: 'skill_change' }));
48
+ const session = store.getSession('sess-1');
49
+ strict_1.default.equal(session.active_skill, 'architect');
50
+ strict_1.default.equal(session.active_confidence, 'explicit');
51
+ });
52
+ (0, node_test_1.it)('derives running status from tool_start', () => {
53
+ const store = new state_1.StateStore({ maxEventsPerSession: 10, sessionMaxAgeMs: 60000 });
54
+ store.applyEvent(makeEvent({ event_type: 'tool_start' }));
55
+ strict_1.default.equal(store.getSession('sess-1').status, 'running');
56
+ });
57
+ (0, node_test_1.it)('derives success status from tool_end', () => {
58
+ const store = new state_1.StateStore({ maxEventsPerSession: 10, sessionMaxAgeMs: 60000 });
59
+ store.applyEvent(makeEvent({ event_type: 'tool_end', status: 'success' }));
60
+ strict_1.default.equal(store.getSession('sess-1').status, 'success');
61
+ });
62
+ (0, node_test_1.it)('derives error status from failed tool_end', () => {
63
+ const store = new state_1.StateStore({ maxEventsPerSession: 10, sessionMaxAgeMs: 60000 });
64
+ store.applyEvent(makeEvent({ event_type: 'tool_end', status: 'error' }));
65
+ strict_1.default.equal(store.getSession('sess-1').status, 'error');
66
+ });
67
+ (0, node_test_1.it)('prunes inactive sessions', () => {
68
+ const store = new state_1.StateStore({ maxEventsPerSession: 10, sessionMaxAgeMs: 1000 });
69
+ store.applyEvent(makeEvent());
70
+ const removed = store.pruneInactive(Date.now() + 2000);
71
+ strict_1.default.equal(removed, 1);
72
+ strict_1.default.equal(store.getSession('sess-1'), undefined);
73
+ });
74
+ (0, node_test_1.it)('returns sessions sorted by last event', () => {
75
+ const store = new state_1.StateStore({ maxEventsPerSession: 10, sessionMaxAgeMs: 60000 });
76
+ store.applyEvent(makeEvent({ session_id: 'a', timestamp: 1000 }));
77
+ store.applyEvent(makeEvent({ session_id: 'b', timestamp: 2000 }));
78
+ const sessions = store.getAllSessions();
79
+ strict_1.default.equal(sessions[0].id, 'b');
80
+ strict_1.default.equal(sessions[1].id, 'a');
81
+ });
82
+ });
83
+ //# sourceMappingURL=state.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state.test.js","sourceRoot":"","sources":["../src/state.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,86 @@
1
+ export type AgentSource = 'kimi' | 'codex' | 'opencode' | 'log-watcher';
2
+ export type EventType = 'session_start' | 'session_end' | 'tool_start' | 'tool_end' | 'skill_change';
3
+ export type EventStatus = 'running' | 'success' | 'error';
4
+ export interface DashboardEvent {
5
+ id: string;
6
+ timestamp: number;
7
+ source: AgentSource;
8
+ session_id: string;
9
+ event_type: EventType;
10
+ skill?: string;
11
+ tool?: string;
12
+ detail?: string;
13
+ status?: EventStatus;
14
+ duration_ms?: number;
15
+ }
16
+ export interface Session {
17
+ id: string;
18
+ source: AgentSource;
19
+ active_skill?: string;
20
+ active_confidence?: 'explicit' | 'heuristic' | 'unknown';
21
+ status?: EventStatus;
22
+ events: DashboardEvent[];
23
+ tool_counts: Record<string, number>;
24
+ started_at: number;
25
+ last_event_at: number;
26
+ }
27
+ export interface DashboardState {
28
+ sessions: Record<string, Session>;
29
+ }
30
+ export interface ClientActiveSkill {
31
+ name: string;
32
+ confidence: 'explicit' | 'heuristic' | 'unknown';
33
+ }
34
+ export interface ClientEvent {
35
+ id: string;
36
+ timestamp: number;
37
+ event_type: EventType;
38
+ tool?: string;
39
+ detail?: string;
40
+ status?: EventStatus;
41
+ duration_ms?: number;
42
+ skill?: string;
43
+ }
44
+ export interface ClientSession {
45
+ id: string;
46
+ source: AgentSource;
47
+ skill?: string;
48
+ activeSkill?: ClientActiveSkill;
49
+ status?: EventStatus;
50
+ events: ClientEvent[];
51
+ startTime: number;
52
+ lastActivity: number;
53
+ toolCounts: Record<string, number>;
54
+ }
55
+ export interface ClientSnapshotMessage {
56
+ type: 'snapshot';
57
+ sessions: ClientSession[];
58
+ }
59
+ export interface ClientUpdateMessage {
60
+ type: 'update';
61
+ session: ClientSession;
62
+ isActive: boolean;
63
+ }
64
+ export interface ClientPongMessage {
65
+ type: 'pong';
66
+ }
67
+ export type ClientWebSocketMessage = ClientSnapshotMessage | ClientUpdateMessage | ClientPongMessage;
68
+ export interface SkillMeta {
69
+ name: string;
70
+ description: string;
71
+ icon: string;
72
+ }
73
+ export type ToolToSkillMap = Record<string, string | undefined>;
74
+ export interface SkillInferenceResult {
75
+ skill: string | undefined;
76
+ confidence: 'explicit' | 'heuristic' | 'unknown';
77
+ }
78
+ export interface ServerConfig {
79
+ port: number;
80
+ host: string;
81
+ packageRoot: string;
82
+ maxEventsPerSession: number;
83
+ sessionMaxAgeMs: number;
84
+ pruneIntervalMs: number;
85
+ }
86
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}