oh-my-claude-sisyphus 3.4.2 → 3.5.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.
- package/README.md +45 -0
- package/commands/cancel-ultraqa.md +1 -1
- package/dist/__tests__/analytics/analytics-summary.test.d.ts +2 -0
- package/dist/__tests__/analytics/analytics-summary.test.d.ts.map +1 -0
- package/dist/__tests__/analytics/analytics-summary.test.js +267 -0
- package/dist/__tests__/analytics/analytics-summary.test.js.map +1 -0
- package/dist/__tests__/analytics/backfill-dedup.test.d.ts +2 -0
- package/dist/__tests__/analytics/backfill-dedup.test.d.ts.map +1 -0
- package/dist/__tests__/analytics/backfill-dedup.test.js +179 -0
- package/dist/__tests__/analytics/backfill-dedup.test.js.map +1 -0
- package/dist/__tests__/analytics/backfill-engine.test.d.ts +2 -0
- package/dist/__tests__/analytics/backfill-engine.test.d.ts.map +1 -0
- package/dist/__tests__/analytics/backfill-engine.test.js +362 -0
- package/dist/__tests__/analytics/backfill-engine.test.js.map +1 -0
- package/dist/__tests__/analytics/cost-estimator.test.d.ts +2 -0
- package/dist/__tests__/analytics/cost-estimator.test.d.ts.map +1 -0
- package/dist/__tests__/analytics/cost-estimator.test.js +212 -0
- package/dist/__tests__/analytics/cost-estimator.test.js.map +1 -0
- package/dist/__tests__/analytics/output-estimator.test.d.ts +2 -0
- package/dist/__tests__/analytics/output-estimator.test.d.ts.map +1 -0
- package/dist/__tests__/analytics/output-estimator.test.js +106 -0
- package/dist/__tests__/analytics/output-estimator.test.js.map +1 -0
- package/dist/__tests__/analytics/token-extractor.test.d.ts +2 -0
- package/dist/__tests__/analytics/token-extractor.test.d.ts.map +1 -0
- package/dist/__tests__/analytics/token-extractor.test.js +121 -0
- package/dist/__tests__/analytics/token-extractor.test.js.map +1 -0
- package/dist/__tests__/analytics/transcript-parser.test.d.ts +2 -0
- package/dist/__tests__/analytics/transcript-parser.test.d.ts.map +1 -0
- package/dist/__tests__/analytics/transcript-parser.test.js +285 -0
- package/dist/__tests__/analytics/transcript-parser.test.js.map +1 -0
- package/dist/__tests__/analytics/transcript-scanner.test.d.ts +2 -0
- package/dist/__tests__/analytics/transcript-scanner.test.d.ts.map +1 -0
- package/dist/__tests__/analytics/transcript-scanner.test.js +401 -0
- package/dist/__tests__/analytics/transcript-scanner.test.js.map +1 -0
- package/dist/__tests__/analytics/transcript-token-extractor.test.d.ts +2 -0
- package/dist/__tests__/analytics/transcript-token-extractor.test.d.ts.map +1 -0
- package/dist/__tests__/analytics/transcript-token-extractor.test.js +175 -0
- package/dist/__tests__/analytics/transcript-token-extractor.test.js.map +1 -0
- package/dist/__tests__/hud/auto-tracking.integration.test.d.ts +2 -0
- package/dist/__tests__/hud/auto-tracking.integration.test.d.ts.map +1 -0
- package/dist/__tests__/hud/auto-tracking.integration.test.js +12 -0
- package/dist/__tests__/hud/auto-tracking.integration.test.js.map +1 -0
- package/dist/__tests__/learner/auto-learner.test.d.ts +7 -0
- package/dist/__tests__/learner/auto-learner.test.d.ts.map +1 -0
- package/dist/__tests__/learner/auto-learner.test.js +507 -0
- package/dist/__tests__/learner/auto-learner.test.js.map +1 -0
- package/dist/__tests__/learner/matcher.test.d.ts +2 -0
- package/dist/__tests__/learner/matcher.test.d.ts.map +1 -0
- package/dist/__tests__/learner/matcher.test.js +330 -0
- package/dist/__tests__/learner/matcher.test.js.map +1 -0
- package/dist/analytics/analytics-summary.d.ts +47 -0
- package/dist/analytics/analytics-summary.d.ts.map +1 -0
- package/dist/analytics/analytics-summary.js +171 -0
- package/dist/analytics/analytics-summary.js.map +1 -0
- package/dist/analytics/backfill-dedup.d.ts +49 -0
- package/dist/analytics/backfill-dedup.d.ts.map +1 -0
- package/dist/analytics/backfill-dedup.js +115 -0
- package/dist/analytics/backfill-dedup.js.map +1 -0
- package/dist/analytics/backfill-engine.d.ts +59 -0
- package/dist/analytics/backfill-engine.d.ts.map +1 -0
- package/dist/analytics/backfill-engine.js +172 -0
- package/dist/analytics/backfill-engine.js.map +1 -0
- package/dist/analytics/index.d.ts +8 -0
- package/dist/analytics/index.d.ts.map +1 -1
- package/dist/analytics/index.js +10 -0
- package/dist/analytics/index.js.map +1 -1
- package/dist/analytics/output-estimator.d.ts +26 -0
- package/dist/analytics/output-estimator.d.ts.map +1 -0
- package/dist/analytics/output-estimator.js +61 -0
- package/dist/analytics/output-estimator.js.map +1 -0
- package/dist/analytics/query-engine.d.ts.map +1 -1
- package/dist/analytics/query-engine.js +3 -2
- package/dist/analytics/query-engine.js.map +1 -1
- package/dist/analytics/token-extractor.d.ts +31 -0
- package/dist/analytics/token-extractor.d.ts.map +1 -0
- package/dist/analytics/token-extractor.js +57 -0
- package/dist/analytics/token-extractor.js.map +1 -0
- package/dist/analytics/token-tracker.d.ts +7 -1
- package/dist/analytics/token-tracker.d.ts.map +1 -1
- package/dist/analytics/token-tracker.js +94 -18
- package/dist/analytics/token-tracker.js.map +1 -1
- package/dist/analytics/transcript-parser.d.ts +42 -0
- package/dist/analytics/transcript-parser.d.ts.map +1 -0
- package/dist/analytics/transcript-parser.js +90 -0
- package/dist/analytics/transcript-parser.js.map +1 -0
- package/dist/analytics/transcript-scanner.d.ts +50 -0
- package/dist/analytics/transcript-scanner.d.ts.map +1 -0
- package/dist/analytics/transcript-scanner.js +149 -0
- package/dist/analytics/transcript-scanner.js.map +1 -0
- package/dist/analytics/transcript-token-extractor.d.ts +35 -0
- package/dist/analytics/transcript-token-extractor.d.ts.map +1 -0
- package/dist/analytics/transcript-token-extractor.js +136 -0
- package/dist/analytics/transcript-token-extractor.js.map +1 -0
- package/dist/analytics/types.d.ts +65 -0
- package/dist/analytics/types.d.ts.map +1 -1
- package/dist/analytics/types.js.map +1 -1
- package/dist/cli/analytics.js +26 -1
- package/dist/cli/analytics.js.map +1 -1
- package/dist/cli/commands/backfill.d.ts +15 -0
- package/dist/cli/commands/backfill.d.ts.map +1 -0
- package/dist/cli/commands/backfill.js +146 -0
- package/dist/cli/commands/backfill.js.map +1 -0
- package/dist/cli/commands/stats.d.ts +1 -0
- package/dist/cli/commands/stats.d.ts.map +1 -1
- package/dist/cli/commands/stats.js +67 -31
- package/dist/cli/commands/stats.js.map +1 -1
- package/dist/cli/components/CostDashboard.d.ts +15 -0
- package/dist/cli/components/CostDashboard.d.ts.map +1 -0
- package/dist/cli/components/CostDashboard.js +15 -0
- package/dist/cli/components/CostDashboard.js.map +1 -0
- package/dist/cli/components/LiveStats.d.ts +16 -0
- package/dist/cli/components/LiveStats.d.ts.map +1 -0
- package/dist/cli/components/LiveStats.js +16 -0
- package/dist/cli/components/LiveStats.js.map +1 -0
- package/dist/cli/components/SessionBrowser.d.ts +14 -0
- package/dist/cli/components/SessionBrowser.d.ts.map +1 -0
- package/dist/cli/components/SessionBrowser.js +14 -0
- package/dist/cli/components/SessionBrowser.js.map +1 -0
- package/dist/cli/index.js +159 -3
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/tui.d.ts +21 -0
- package/dist/cli/tui.d.ts.map +1 -0
- package/dist/cli/tui.js +21 -0
- package/dist/cli/tui.js.map +1 -0
- package/dist/hooks/learner/auto-invoke.d.ts +82 -0
- package/dist/hooks/learner/auto-invoke.d.ts.map +1 -0
- package/dist/hooks/learner/auto-invoke.js +234 -0
- package/dist/hooks/learner/auto-invoke.js.map +1 -0
- package/dist/hooks/learner/auto-learner.d.ts +55 -0
- package/dist/hooks/learner/auto-learner.d.ts.map +1 -0
- package/dist/hooks/learner/auto-learner.js +361 -0
- package/dist/hooks/learner/auto-learner.js.map +1 -0
- package/dist/hooks/learner/index.d.ts +3 -0
- package/dist/hooks/learner/index.d.ts.map +1 -1
- package/dist/hooks/learner/index.js +4 -0
- package/dist/hooks/learner/index.js.map +1 -1
- package/dist/hooks/learner/matcher.d.ts +40 -0
- package/dist/hooks/learner/matcher.d.ts.map +1 -0
- package/dist/hooks/learner/matcher.js +230 -0
- package/dist/hooks/learner/matcher.js.map +1 -0
- package/dist/hud/analytics-display.d.ts +16 -0
- package/dist/hud/analytics-display.d.ts.map +1 -1
- package/dist/hud/analytics-display.js +42 -0
- package/dist/hud/analytics-display.js.map +1 -1
- package/dist/hud/index.js +90 -3
- package/dist/hud/index.js.map +1 -1
- package/dist/hud/render.d.ts.map +1 -1
- package/dist/hud/render.js +27 -1
- package/dist/hud/render.js.map +1 -1
- package/dist/hud/types.d.ts +2 -0
- package/dist/hud/types.d.ts.map +1 -1
- package/dist/hud/types.js.map +1 -1
- package/docs/ANALYTICS-SYSTEM.md +150 -0
- package/hooks/keyword-detector.sh +1 -1
- package/package.json +1 -1
- package/scripts/keyword-detector.mjs +1 -1
- package/scripts/persistent-mode.mjs +1 -1
- package/scripts/test-mutual-exclusion.ts +4 -4
- package/scripts/test-remember-tags.ts +6 -6
- package/scripts/test-session-injection.ts +4 -4
- package/skills/cancel-ultraqa/SKILL.md +1 -1
- package/skills/local-skills-setup/SKILL.md +465 -0
- package/skills/omc-setup/SKILL.md +30 -5
- package/skills/skill/SKILL.md +406 -0
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
export interface InvocationConfig {
|
|
2
|
+
enabled: boolean;
|
|
3
|
+
confidenceThreshold: number;
|
|
4
|
+
maxAutoInvokes: number;
|
|
5
|
+
cooldownMs: number;
|
|
6
|
+
}
|
|
7
|
+
export interface InvocationRecord {
|
|
8
|
+
skillId: string;
|
|
9
|
+
skillName: string;
|
|
10
|
+
timestamp: number;
|
|
11
|
+
confidence: number;
|
|
12
|
+
prompt: string;
|
|
13
|
+
wasSuccessful: boolean | null;
|
|
14
|
+
feedbackScore: number | null;
|
|
15
|
+
}
|
|
16
|
+
export interface AutoInvokeState {
|
|
17
|
+
sessionId: string;
|
|
18
|
+
config: InvocationConfig;
|
|
19
|
+
invocations: InvocationRecord[];
|
|
20
|
+
lastInvokeTime: number;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Load auto-invocation config from ~/.claude/.omc-config.json
|
|
24
|
+
*/
|
|
25
|
+
export declare function loadInvocationConfig(): InvocationConfig;
|
|
26
|
+
/**
|
|
27
|
+
* Initialize auto-invoke state for a session
|
|
28
|
+
*/
|
|
29
|
+
export declare function initAutoInvoke(sessionId: string): AutoInvokeState;
|
|
30
|
+
/**
|
|
31
|
+
* Decide whether to auto-invoke a skill based on confidence and constraints
|
|
32
|
+
*/
|
|
33
|
+
export declare function shouldAutoInvoke(state: AutoInvokeState, skillId: string, confidence: number): boolean;
|
|
34
|
+
/**
|
|
35
|
+
* Record a skill invocation
|
|
36
|
+
*/
|
|
37
|
+
export declare function recordInvocation(state: AutoInvokeState, record: Omit<InvocationRecord, 'timestamp'>): void;
|
|
38
|
+
/**
|
|
39
|
+
* Update the success status of a skill invocation
|
|
40
|
+
*/
|
|
41
|
+
export declare function updateInvocationSuccess(state: AutoInvokeState, skillId: string, wasSuccessful: boolean): void;
|
|
42
|
+
/**
|
|
43
|
+
* Format skill for auto-invocation (more prominent than passive injection)
|
|
44
|
+
*/
|
|
45
|
+
export declare function formatAutoInvoke(skill: {
|
|
46
|
+
name: string;
|
|
47
|
+
content: string;
|
|
48
|
+
confidence: number;
|
|
49
|
+
}): string;
|
|
50
|
+
/**
|
|
51
|
+
* Get invocation statistics for the session
|
|
52
|
+
*/
|
|
53
|
+
export declare function getInvocationStats(state: AutoInvokeState): {
|
|
54
|
+
total: number;
|
|
55
|
+
successful: number;
|
|
56
|
+
failed: number;
|
|
57
|
+
unknown: number;
|
|
58
|
+
averageConfidence: number;
|
|
59
|
+
};
|
|
60
|
+
/**
|
|
61
|
+
* Save invocation history to disk for analytics
|
|
62
|
+
*/
|
|
63
|
+
export declare function saveInvocationHistory(state: AutoInvokeState): void;
|
|
64
|
+
/**
|
|
65
|
+
* Load invocation history from disk
|
|
66
|
+
*/
|
|
67
|
+
export declare function loadInvocationHistory(sessionId: string): AutoInvokeState | null;
|
|
68
|
+
/**
|
|
69
|
+
* Get aggregated invocation analytics across all sessions
|
|
70
|
+
*/
|
|
71
|
+
export declare function getAggregatedStats(): {
|
|
72
|
+
totalSessions: number;
|
|
73
|
+
totalInvocations: number;
|
|
74
|
+
successRate: number;
|
|
75
|
+
topSkills: Array<{
|
|
76
|
+
skillId: string;
|
|
77
|
+
skillName: string;
|
|
78
|
+
count: number;
|
|
79
|
+
successRate: number;
|
|
80
|
+
}>;
|
|
81
|
+
};
|
|
82
|
+
//# sourceMappingURL=auto-invoke.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auto-invoke.d.ts","sourceRoot":"","sources":["../../../src/hooks/learner/auto-invoke.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,OAAO,CAAC;IACjB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,OAAO,GAAG,IAAI,CAAC;IAC9B,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B;AAED,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,gBAAgB,CAAC;IACzB,WAAW,EAAE,gBAAgB,EAAE,CAAC;IAChC,cAAc,EAAE,MAAM,CAAC;CACxB;AASD;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,gBAAgB,CAsBvD;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,eAAe,CAOjE;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,eAAe,EACtB,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,GACjB,OAAO,CA+BT;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,eAAe,EACtB,MAAM,EAAE,IAAI,CAAC,gBAAgB,EAAE,WAAW,CAAC,GAC1C,IAAI,CAMN;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,eAAe,EACtB,OAAO,EAAE,MAAM,EACf,aAAa,EAAE,OAAO,GACrB,IAAI,CASN;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;CACpB,GAAG,MAAM,CAeT;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,eAAe,GAAG;IAC1D,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,iBAAiB,EAAE,MAAM,CAAC;CAC3B,CAkBA;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,eAAe,GAAG,IAAI,CAgBlE;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI,CA2B/E;AAED;;GAEG;AACH,wBAAgB,kBAAkB,IAAI;IACpC,aAAa,EAAE,MAAM,CAAC;IACtB,gBAAgB,EAAE,MAAM,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC9F,CA2DA"}
|
|
@@ -0,0 +1,234 @@
|
|
|
1
|
+
import fs from 'fs';
|
|
2
|
+
import path from 'path';
|
|
3
|
+
import os from 'os';
|
|
4
|
+
const DEFAULT_CONFIG = {
|
|
5
|
+
enabled: true,
|
|
6
|
+
confidenceThreshold: 80,
|
|
7
|
+
maxAutoInvokes: 3,
|
|
8
|
+
cooldownMs: 30000,
|
|
9
|
+
};
|
|
10
|
+
/**
|
|
11
|
+
* Load auto-invocation config from ~/.claude/.omc-config.json
|
|
12
|
+
*/
|
|
13
|
+
export function loadInvocationConfig() {
|
|
14
|
+
const configPath = path.join(os.homedir(), '.claude', '.omc-config.json');
|
|
15
|
+
try {
|
|
16
|
+
if (!fs.existsSync(configPath)) {
|
|
17
|
+
return { ...DEFAULT_CONFIG };
|
|
18
|
+
}
|
|
19
|
+
const configFile = fs.readFileSync(configPath, 'utf-8');
|
|
20
|
+
const config = JSON.parse(configFile);
|
|
21
|
+
// Merge with defaults
|
|
22
|
+
return {
|
|
23
|
+
enabled: config.autoInvoke?.enabled ?? DEFAULT_CONFIG.enabled,
|
|
24
|
+
confidenceThreshold: config.autoInvoke?.confidenceThreshold ?? DEFAULT_CONFIG.confidenceThreshold,
|
|
25
|
+
maxAutoInvokes: config.autoInvoke?.maxAutoInvokes ?? DEFAULT_CONFIG.maxAutoInvokes,
|
|
26
|
+
cooldownMs: config.autoInvoke?.cooldownMs ?? DEFAULT_CONFIG.cooldownMs,
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
catch (error) {
|
|
30
|
+
console.error('[auto-invoke] Failed to load config:', error);
|
|
31
|
+
return { ...DEFAULT_CONFIG };
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Initialize auto-invoke state for a session
|
|
36
|
+
*/
|
|
37
|
+
export function initAutoInvoke(sessionId) {
|
|
38
|
+
return {
|
|
39
|
+
sessionId,
|
|
40
|
+
config: loadInvocationConfig(),
|
|
41
|
+
invocations: [],
|
|
42
|
+
lastInvokeTime: 0,
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Decide whether to auto-invoke a skill based on confidence and constraints
|
|
47
|
+
*/
|
|
48
|
+
export function shouldAutoInvoke(state, skillId, confidence) {
|
|
49
|
+
const { config, invocations, lastInvokeTime } = state;
|
|
50
|
+
// Check if auto-invoke is enabled
|
|
51
|
+
if (!config.enabled) {
|
|
52
|
+
return false;
|
|
53
|
+
}
|
|
54
|
+
// Check confidence threshold
|
|
55
|
+
if (confidence < config.confidenceThreshold) {
|
|
56
|
+
return false;
|
|
57
|
+
}
|
|
58
|
+
// Check max invocations per session
|
|
59
|
+
if (invocations.length >= config.maxAutoInvokes) {
|
|
60
|
+
return false;
|
|
61
|
+
}
|
|
62
|
+
// Check cooldown
|
|
63
|
+
const now = Date.now();
|
|
64
|
+
if (now - lastInvokeTime < config.cooldownMs) {
|
|
65
|
+
return false;
|
|
66
|
+
}
|
|
67
|
+
// Check if this skill was already invoked in this session
|
|
68
|
+
const alreadyInvoked = invocations.some(inv => inv.skillId === skillId);
|
|
69
|
+
if (alreadyInvoked) {
|
|
70
|
+
return false;
|
|
71
|
+
}
|
|
72
|
+
return true;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Record a skill invocation
|
|
76
|
+
*/
|
|
77
|
+
export function recordInvocation(state, record) {
|
|
78
|
+
state.invocations.push({
|
|
79
|
+
...record,
|
|
80
|
+
timestamp: Date.now(),
|
|
81
|
+
});
|
|
82
|
+
state.lastInvokeTime = Date.now();
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Update the success status of a skill invocation
|
|
86
|
+
*/
|
|
87
|
+
export function updateInvocationSuccess(state, skillId, wasSuccessful) {
|
|
88
|
+
// Update the most recent invocation of this skill
|
|
89
|
+
const invocation = [...state.invocations]
|
|
90
|
+
.reverse()
|
|
91
|
+
.find(inv => inv.skillId === skillId);
|
|
92
|
+
if (invocation) {
|
|
93
|
+
invocation.wasSuccessful = wasSuccessful;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Format skill for auto-invocation (more prominent than passive injection)
|
|
98
|
+
*/
|
|
99
|
+
export function formatAutoInvoke(skill) {
|
|
100
|
+
return `
|
|
101
|
+
<auto_invoke_skill>
|
|
102
|
+
HIGH CONFIDENCE MATCH (${skill.confidence.toFixed(1)}%) - AUTO-INVOKING SKILL
|
|
103
|
+
|
|
104
|
+
SKILL: ${skill.name}
|
|
105
|
+
CONFIDENCE: ${skill.confidence.toFixed(1)}%
|
|
106
|
+
STATUS: AUTOMATICALLY INVOKED
|
|
107
|
+
|
|
108
|
+
${skill.content}
|
|
109
|
+
|
|
110
|
+
INSTRUCTION: This skill has been automatically invoked due to high confidence match.
|
|
111
|
+
Please follow the skill's instructions immediately.
|
|
112
|
+
</auto_invoke_skill>
|
|
113
|
+
`;
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Get invocation statistics for the session
|
|
117
|
+
*/
|
|
118
|
+
export function getInvocationStats(state) {
|
|
119
|
+
const { invocations } = state;
|
|
120
|
+
const successful = invocations.filter(inv => inv.wasSuccessful === true).length;
|
|
121
|
+
const failed = invocations.filter(inv => inv.wasSuccessful === false).length;
|
|
122
|
+
const unknown = invocations.filter(inv => inv.wasSuccessful === null).length;
|
|
123
|
+
const averageConfidence = invocations.length > 0
|
|
124
|
+
? invocations.reduce((sum, inv) => sum + inv.confidence, 0) / invocations.length
|
|
125
|
+
: 0;
|
|
126
|
+
return {
|
|
127
|
+
total: invocations.length,
|
|
128
|
+
successful,
|
|
129
|
+
failed,
|
|
130
|
+
unknown,
|
|
131
|
+
averageConfidence,
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Save invocation history to disk for analytics
|
|
136
|
+
*/
|
|
137
|
+
export function saveInvocationHistory(state) {
|
|
138
|
+
const historyDir = path.join(os.homedir(), '.omc', 'analytics', 'invocations');
|
|
139
|
+
try {
|
|
140
|
+
fs.mkdirSync(historyDir, { recursive: true });
|
|
141
|
+
const historyFile = path.join(historyDir, `${state.sessionId}.json`);
|
|
142
|
+
fs.writeFileSync(historyFile, JSON.stringify({
|
|
143
|
+
sessionId: state.sessionId,
|
|
144
|
+
config: state.config,
|
|
145
|
+
invocations: state.invocations,
|
|
146
|
+
stats: getInvocationStats(state),
|
|
147
|
+
}, null, 2));
|
|
148
|
+
}
|
|
149
|
+
catch (error) {
|
|
150
|
+
console.error('[auto-invoke] Failed to save invocation history:', error);
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Load invocation history from disk
|
|
155
|
+
*/
|
|
156
|
+
export function loadInvocationHistory(sessionId) {
|
|
157
|
+
const historyFile = path.join(os.homedir(), '.omc', 'analytics', 'invocations', `${sessionId}.json`);
|
|
158
|
+
try {
|
|
159
|
+
if (!fs.existsSync(historyFile)) {
|
|
160
|
+
return null;
|
|
161
|
+
}
|
|
162
|
+
const data = JSON.parse(fs.readFileSync(historyFile, 'utf-8'));
|
|
163
|
+
return {
|
|
164
|
+
sessionId: data.sessionId,
|
|
165
|
+
config: data.config,
|
|
166
|
+
invocations: data.invocations,
|
|
167
|
+
lastInvokeTime: data.invocations.length > 0
|
|
168
|
+
? Math.max(...data.invocations.map((inv) => inv.timestamp))
|
|
169
|
+
: 0,
|
|
170
|
+
};
|
|
171
|
+
}
|
|
172
|
+
catch (error) {
|
|
173
|
+
console.error('[auto-invoke] Failed to load invocation history:', error);
|
|
174
|
+
return null;
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* Get aggregated invocation analytics across all sessions
|
|
179
|
+
*/
|
|
180
|
+
export function getAggregatedStats() {
|
|
181
|
+
const historyDir = path.join(os.homedir(), '.omc', 'analytics', 'invocations');
|
|
182
|
+
try {
|
|
183
|
+
if (!fs.existsSync(historyDir)) {
|
|
184
|
+
return {
|
|
185
|
+
totalSessions: 0,
|
|
186
|
+
totalInvocations: 0,
|
|
187
|
+
successRate: 0,
|
|
188
|
+
topSkills: [],
|
|
189
|
+
};
|
|
190
|
+
}
|
|
191
|
+
const files = fs.readdirSync(historyDir).filter(f => f.endsWith('.json'));
|
|
192
|
+
const allInvocations = [];
|
|
193
|
+
const skillStats = new Map();
|
|
194
|
+
for (const file of files) {
|
|
195
|
+
const data = JSON.parse(fs.readFileSync(path.join(historyDir, file), 'utf-8'));
|
|
196
|
+
allInvocations.push(...data.invocations);
|
|
197
|
+
for (const inv of data.invocations) {
|
|
198
|
+
const existing = skillStats.get(inv.skillId) || { name: inv.skillName, total: 0, successful: 0 };
|
|
199
|
+
existing.total++;
|
|
200
|
+
if (inv.wasSuccessful === true) {
|
|
201
|
+
existing.successful++;
|
|
202
|
+
}
|
|
203
|
+
skillStats.set(inv.skillId, existing);
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
const successful = allInvocations.filter(inv => inv.wasSuccessful === true).length;
|
|
207
|
+
const withKnownStatus = allInvocations.filter(inv => inv.wasSuccessful !== null).length;
|
|
208
|
+
const topSkills = Array.from(skillStats.entries())
|
|
209
|
+
.map(([skillId, stats]) => ({
|
|
210
|
+
skillId,
|
|
211
|
+
skillName: stats.name,
|
|
212
|
+
count: stats.total,
|
|
213
|
+
successRate: stats.total > 0 ? (stats.successful / stats.total) * 100 : 0,
|
|
214
|
+
}))
|
|
215
|
+
.sort((a, b) => b.count - a.count)
|
|
216
|
+
.slice(0, 10);
|
|
217
|
+
return {
|
|
218
|
+
totalSessions: files.length,
|
|
219
|
+
totalInvocations: allInvocations.length,
|
|
220
|
+
successRate: withKnownStatus > 0 ? (successful / withKnownStatus) * 100 : 0,
|
|
221
|
+
topSkills,
|
|
222
|
+
};
|
|
223
|
+
}
|
|
224
|
+
catch (error) {
|
|
225
|
+
console.error('[auto-invoke] Failed to get aggregated stats:', error);
|
|
226
|
+
return {
|
|
227
|
+
totalSessions: 0,
|
|
228
|
+
totalInvocations: 0,
|
|
229
|
+
successRate: 0,
|
|
230
|
+
topSkills: [],
|
|
231
|
+
};
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
//# sourceMappingURL=auto-invoke.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auto-invoke.js","sourceRoot":"","sources":["../../../src/hooks/learner/auto-invoke.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Auto-Learner Module
|
|
3
|
+
*
|
|
4
|
+
* Automatically detects skill-worthy patterns during work sessions.
|
|
5
|
+
* Tracks problem-solution pairs and suggests skill extraction.
|
|
6
|
+
*/
|
|
7
|
+
import type { SkillMetadata } from './types.js';
|
|
8
|
+
/**
|
|
9
|
+
* Detected pattern that could become a skill.
|
|
10
|
+
*/
|
|
11
|
+
export interface PatternDetection {
|
|
12
|
+
id: string;
|
|
13
|
+
problem: string;
|
|
14
|
+
solution: string;
|
|
15
|
+
confidence: number;
|
|
16
|
+
occurrences: number;
|
|
17
|
+
firstSeen: number;
|
|
18
|
+
lastSeen: number;
|
|
19
|
+
suggestedTriggers: string[];
|
|
20
|
+
suggestedTags: string[];
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Auto-learner session state.
|
|
24
|
+
*/
|
|
25
|
+
export interface AutoLearnerState {
|
|
26
|
+
sessionId: string;
|
|
27
|
+
patterns: Map<string, PatternDetection>;
|
|
28
|
+
suggestedSkills: PatternDetection[];
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Initialize state for a session.
|
|
32
|
+
*/
|
|
33
|
+
export declare function initAutoLearner(sessionId: string): AutoLearnerState;
|
|
34
|
+
/**
|
|
35
|
+
* Extract triggers from problem and solution text.
|
|
36
|
+
*/
|
|
37
|
+
export declare function extractTriggers(problem: string, solution: string): string[];
|
|
38
|
+
/**
|
|
39
|
+
* Calculate skill-worthiness score (0-100).
|
|
40
|
+
*/
|
|
41
|
+
export declare function calculateSkillWorthiness(pattern: PatternDetection): number;
|
|
42
|
+
/**
|
|
43
|
+
* Record a problem-solution pair.
|
|
44
|
+
* Returns the pattern if it's new or updated, null if ignored.
|
|
45
|
+
*/
|
|
46
|
+
export declare function recordPattern(state: AutoLearnerState, problem: string, solution: string): PatternDetection | null;
|
|
47
|
+
/**
|
|
48
|
+
* Get ready-to-suggest skills (confidence above threshold).
|
|
49
|
+
*/
|
|
50
|
+
export declare function getSuggestedSkills(state: AutoLearnerState, threshold?: number): PatternDetection[];
|
|
51
|
+
/**
|
|
52
|
+
* Convert pattern to skill metadata (partial).
|
|
53
|
+
*/
|
|
54
|
+
export declare function patternToSkillMetadata(pattern: PatternDetection): Partial<SkillMetadata>;
|
|
55
|
+
//# sourceMappingURL=auto-learner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auto-learner.d.ts","sourceRoot":"","sources":["../../../src/hooks/learner/auto-learner.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,aAAa,EAAE,MAAM,EAAE,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;IACxC,eAAe,EAAE,gBAAgB,EAAE,CAAC;CACrC;AAiDD;;GAEG;AACH,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,gBAAgB,CAMnE;AA6FD;;GAEG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,CA0C3E;AA4DD;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,gBAAgB,GAAG,MAAM,CA0D1E;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAC3B,KAAK,EAAE,gBAAgB,EACvB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,GACf,gBAAgB,GAAG,IAAI,CAgEzB;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,gBAAgB,EACvB,SAAS,GAAE,MAAqC,GAC/C,gBAAgB,EAAE,CAEpB;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,aAAa,CAAC,CAcxF"}
|