@miller-tech/uap 1.8.1 → 1.10.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 +285 -642
- package/config/chat_template.jinja +76 -0
- package/config/lora-finetune.yaml +82 -0
- package/config/model-profiles/claude-haiku-3.5.json +62 -0
- package/config/model-profiles/claude-opus-4.6.json +63 -0
- package/config/model-profiles/claude-sonnet-4.6.json +63 -0
- package/config/model-profiles/gemini-2.5-flash.json +62 -0
- package/config/model-profiles/gemini-2.5-pro.json +62 -0
- package/config/model-profiles/generic.json +54 -0
- package/config/model-profiles/glm-5.json +61 -0
- package/config/model-profiles/gpt-4.1.json +64 -0
- package/config/model-profiles/gpt-4o.json +64 -0
- package/config/model-profiles/gpt-o3.json +61 -0
- package/config/model-profiles/kimi-k2.5.json +70 -0
- package/config/model-profiles/llama.json +86 -0
- package/config/model-profiles/qwen35.json +218 -0
- package/dist/.tsbuildinfo +1 -1
- package/dist/bin/cli.js +78 -9
- package/dist/bin/cli.js.map +1 -1
- package/dist/bin/llama-server-optimize.js +0 -10
- package/dist/bin/llama-server-optimize.js.map +1 -1
- package/dist/bin/policy.js +11 -195
- package/dist/bin/policy.js.map +1 -1
- package/dist/cli/dashboard.d.ts.map +1 -1
- package/dist/cli/dashboard.js +14 -14
- package/dist/cli/dashboard.js.map +1 -1
- package/dist/cli/generate.d.ts +0 -7
- package/dist/cli/generate.d.ts.map +1 -1
- package/dist/cli/generate.js +10 -22
- package/dist/cli/generate.js.map +1 -1
- package/dist/cli/hooks.d.ts +1 -1
- package/dist/cli/hooks.d.ts.map +1 -1
- package/dist/cli/hooks.js +371 -0
- package/dist/cli/hooks.js.map +1 -1
- package/dist/cli/init.d.ts.map +1 -1
- package/dist/cli/init.js +120 -3
- package/dist/cli/init.js.map +1 -1
- package/dist/cli/memory.d.ts.map +1 -1
- package/dist/cli/memory.js +43 -109
- package/dist/cli/memory.js.map +1 -1
- package/dist/cli/model.d.ts.map +1 -1
- package/dist/cli/model.js +8 -25
- package/dist/cli/model.js.map +1 -1
- package/dist/cli/patterns.d.ts.map +1 -1
- package/dist/cli/patterns.js +11 -9
- package/dist/cli/patterns.js.map +1 -1
- package/dist/cli/policy.d.ts.map +1 -1
- package/dist/cli/policy.js +165 -1
- package/dist/cli/policy.js.map +1 -1
- package/dist/cli/rtk-validation.d.ts +0 -4
- package/dist/cli/rtk-validation.d.ts.map +1 -1
- package/dist/cli/rtk-validation.js +5 -23
- package/dist/cli/rtk-validation.js.map +1 -1
- package/dist/cli/schema-diff.d.ts.map +1 -1
- package/dist/cli/schema-diff.js +25 -16
- package/dist/cli/schema-diff.js.map +1 -1
- package/dist/cli/setup-wizard.d.ts.map +1 -1
- package/dist/cli/setup-wizard.js +13 -9
- package/dist/cli/setup-wizard.js.map +1 -1
- package/dist/cli/setup.d.ts.map +1 -1
- package/dist/cli/setup.js +3 -4
- package/dist/cli/setup.js.map +1 -1
- package/dist/cli/visualize.d.ts +6 -13
- package/dist/cli/visualize.d.ts.map +1 -1
- package/dist/cli/visualize.js +35 -64
- package/dist/cli/visualize.js.map +1 -1
- package/dist/cli/worktree.d.ts.map +1 -1
- package/dist/cli/worktree.js +12 -13
- package/dist/cli/worktree.js.map +1 -1
- package/dist/coordination/adaptive-patterns.d.ts.map +1 -1
- package/dist/coordination/adaptive-patterns.js +7 -3
- package/dist/coordination/adaptive-patterns.js.map +1 -1
- package/dist/coordination/deploy-batcher.d.ts.map +1 -1
- package/dist/coordination/deploy-batcher.js +8 -8
- package/dist/coordination/deploy-batcher.js.map +1 -1
- package/dist/dashboard/data-service.d.ts.map +1 -1
- package/dist/dashboard/data-service.js +12 -13
- package/dist/dashboard/data-service.js.map +1 -1
- package/dist/dashboard/server.d.ts.map +1 -1
- package/dist/dashboard/server.js +23 -8
- package/dist/dashboard/server.js.map +1 -1
- package/dist/index.d.ts +4 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -3
- package/dist/index.js.map +1 -1
- package/dist/mcp-router/executor/client.d.ts +0 -6
- package/dist/mcp-router/executor/client.d.ts.map +1 -1
- package/dist/mcp-router/executor/client.js +1 -27
- package/dist/mcp-router/executor/client.js.map +1 -1
- package/dist/mcp-router/index.d.ts +1 -1
- package/dist/mcp-router/index.d.ts.map +1 -1
- package/dist/mcp-router/index.js.map +1 -1
- package/dist/mcp-router/output-compressor.js +114 -112
- package/dist/mcp-router/output-compressor.js.map +1 -1
- package/dist/mcp-router/types.d.ts +0 -5
- package/dist/mcp-router/types.d.ts.map +1 -1
- package/dist/memory/backends/github.d.ts.map +1 -1
- package/dist/memory/backends/github.js +21 -13
- package/dist/memory/backends/github.js.map +1 -1
- package/dist/memory/context-pruner.d.ts +2 -9
- package/dist/memory/context-pruner.d.ts.map +1 -1
- package/dist/memory/context-pruner.js +5 -22
- package/dist/memory/context-pruner.js.map +1 -1
- package/dist/memory/correction-propagator.d.ts.map +1 -1
- package/dist/memory/correction-propagator.js +19 -19
- package/dist/memory/correction-propagator.js.map +1 -1
- package/dist/memory/dynamic-retrieval.d.ts.map +1 -1
- package/dist/memory/dynamic-retrieval.js +263 -132
- package/dist/memory/dynamic-retrieval.js.map +1 -1
- package/dist/memory/embeddings.d.ts.map +1 -1
- package/dist/memory/embeddings.js +2 -15
- package/dist/memory/embeddings.js.map +1 -1
- package/dist/memory/hierarchical-memory.d.ts.map +1 -1
- package/dist/memory/hierarchical-memory.js +6 -0
- package/dist/memory/hierarchical-memory.js.map +1 -1
- package/dist/memory/knowledge-graph.d.ts.map +1 -1
- package/dist/memory/knowledge-graph.js +2 -1
- package/dist/memory/knowledge-graph.js.map +1 -1
- package/dist/memory/memory-consolidator.d.ts +1 -0
- package/dist/memory/memory-consolidator.d.ts.map +1 -1
- package/dist/memory/memory-consolidator.js +27 -3
- package/dist/memory/memory-consolidator.js.map +1 -1
- package/dist/memory/predictive-memory.d.ts +9 -1
- package/dist/memory/predictive-memory.d.ts.map +1 -1
- package/dist/memory/predictive-memory.js +77 -1
- package/dist/memory/predictive-memory.js.map +1 -1
- package/dist/memory/serverless-qdrant.d.ts +1 -0
- package/dist/memory/serverless-qdrant.d.ts.map +1 -1
- package/dist/memory/serverless-qdrant.js +3 -9
- package/dist/memory/serverless-qdrant.js.map +1 -1
- package/dist/memory/short-term/schema.d.ts.map +1 -1
- package/dist/memory/short-term/schema.js +44 -6
- package/dist/memory/short-term/schema.js.map +1 -1
- package/dist/memory/short-term/sqlite.d.ts +4 -3
- package/dist/memory/short-term/sqlite.d.ts.map +1 -1
- package/dist/memory/short-term/sqlite.js +3 -12
- package/dist/memory/short-term/sqlite.js.map +1 -1
- package/dist/memory/speculative-cache.js +2 -2
- package/dist/memory/speculative-cache.js.map +1 -1
- package/dist/models/executor.d.ts +21 -0
- package/dist/models/executor.d.ts.map +1 -1
- package/dist/models/executor.js +116 -4
- package/dist/models/executor.js.map +1 -1
- package/dist/models/planner.d.ts +1 -0
- package/dist/models/planner.d.ts.map +1 -1
- package/dist/models/planner.js +13 -1
- package/dist/models/planner.js.map +1 -1
- package/dist/policies/enforced-tool-router.d.ts +3 -1
- package/dist/policies/enforced-tool-router.d.ts.map +1 -1
- package/dist/policies/enforced-tool-router.js.map +1 -1
- package/dist/tasks/service.d.ts +1 -0
- package/dist/tasks/service.d.ts.map +1 -1
- package/dist/tasks/service.js +10 -6
- package/dist/tasks/service.js.map +1 -1
- package/dist/telemetry/session-telemetry.d.ts.map +1 -1
- package/dist/telemetry/session-telemetry.js +73 -17
- package/dist/telemetry/session-telemetry.js.map +1 -1
- package/dist/types/config.d.ts +377 -263
- package/dist/types/config.d.ts.map +1 -1
- package/dist/types/config.js +13 -67
- package/dist/types/config.js.map +1 -1
- package/dist/utils/config-loader.d.ts +34 -0
- package/dist/utils/config-loader.d.ts.map +1 -0
- package/dist/utils/config-loader.js +93 -0
- package/dist/utils/config-loader.js.map +1 -0
- package/dist/utils/lazy-imports.d.ts +18 -0
- package/dist/utils/lazy-imports.d.ts.map +1 -0
- package/dist/utils/lazy-imports.js +39 -0
- package/dist/utils/lazy-imports.js.map +1 -0
- package/dist/utils/stopwords.d.ts +12 -0
- package/dist/utils/stopwords.d.ts.map +1 -0
- package/dist/utils/stopwords.js +196 -0
- package/dist/utils/stopwords.js.map +1 -0
- package/dist/utils/string-similarity.d.ts +10 -3
- package/dist/utils/string-similarity.d.ts.map +1 -1
- package/dist/utils/string-similarity.js +49 -25
- package/dist/utils/string-similarity.js.map +1 -1
- package/docs/INDEX.md +35 -34
- package/package.json +13 -14
- package/scripts/maintenance/publish-npm.sh +82 -0
- package/scripts/maintenance/publish.sh +29 -0
- package/scripts/maintenance/update-droids.py +93 -0
- package/scripts/maintenance/update-skills.py +148 -0
- package/scripts/maintenance/update-uap-compliance.sh +45 -0
- package/scripts/maintenance/validate-skills.py +83 -0
- package/scripts/maintenance/verify-compliance.sh +117 -0
- package/scripts/setup/install-cloakbrowser.ts +14 -0
- package/scripts/setup/install-desktop.sh +105 -0
- package/scripts/setup/install-rtk.sh +184 -0
- package/scripts/setup/install-web.sh +73 -0
- package/scripts/setup/setup.sh +375 -0
- package/scripts/validate-build.sh +62 -0
- package/scripts/version-bump.sh +130 -0
- package/tools/agents/scripts/migrate_memory_to_qdrant.py +1 -1
- /package/docs/{BENCHMARK_GAPS_AND_PLAN.md → archive/BENCHMARK_GAPS_AND_PLAN.md} +0 -0
- /package/docs/{MODEL_ROUTING_IMPLEMENTATION_SUMMARY.md → archive/MODEL_ROUTING_IMPLEMENTATION_SUMMARY.md} +0 -0
- /package/docs/{MODEL_ROUTING_OPTIMIZATION_PLAN.md → archive/MODEL_ROUTING_OPTIMIZATION_PLAN.md} +0 -0
- /package/docs/{PARALLELISM_GAPS_AND_OPTIONS.md → archive/PARALLELISM_GAPS_AND_OPTIONS.md} +0 -0
- /package/docs/{POLICY_GATE_IMPLEMENTATION.md → archive/POLICY_GATE_IMPLEMENTATION.md} +0 -0
- /package/docs/{UAP_OPTIMIZATION_PLAN.md → archive/UAP_OPTIMIZATION_PLAN.md} +0 -0
- /package/docs/{opencode-integration-guide.md → archive/opencode-integration-guide.md} +0 -0
- /package/docs/{opencode-integration-quickref.md → archive/opencode-integration-quickref.md} +0 -0
|
@@ -10,13 +10,19 @@ import { createHash } from 'crypto';
|
|
|
10
10
|
* Returns a value between 0 (no overlap) and 1 (identical)
|
|
11
11
|
*/
|
|
12
12
|
export function jaccardSimilarity(a, b) {
|
|
13
|
-
const setA = new Set(a
|
|
14
|
-
|
|
13
|
+
const setA = new Set(a
|
|
14
|
+
.toLowerCase()
|
|
15
|
+
.split(/\s+/)
|
|
16
|
+
.filter((w) => w.length > 1));
|
|
17
|
+
const setB = new Set(b
|
|
18
|
+
.toLowerCase()
|
|
19
|
+
.split(/\s+/)
|
|
20
|
+
.filter((w) => w.length > 1));
|
|
15
21
|
if (setA.size === 0 && setB.size === 0)
|
|
16
22
|
return 1;
|
|
17
23
|
if (setA.size === 0 || setB.size === 0)
|
|
18
24
|
return 0;
|
|
19
|
-
const intersection = new Set([...setA].filter(x => setB.has(x)));
|
|
25
|
+
const intersection = new Set([...setA].filter((x) => setB.has(x)));
|
|
20
26
|
const union = new Set([...setA, ...setB]);
|
|
21
27
|
return intersection.size / union.size;
|
|
22
28
|
}
|
|
@@ -31,28 +37,11 @@ export function contentHash(text) {
|
|
|
31
37
|
.slice(0, 16); // 16 hex chars = 64 bits, sufficient for dedup
|
|
32
38
|
}
|
|
33
39
|
/**
|
|
34
|
-
* Improved token estimation
|
|
35
|
-
*
|
|
40
|
+
* Improved token estimation — delegates to the canonical implementation
|
|
41
|
+
* in context-compressor.ts to maintain a single source of truth.
|
|
42
|
+
* Kept as a public API alias for backward compatibility.
|
|
36
43
|
*/
|
|
37
|
-
export
|
|
38
|
-
if (!text || text.length === 0)
|
|
39
|
-
return 0;
|
|
40
|
-
// Split by whitespace and count
|
|
41
|
-
const words = text.split(/\s+/).filter(w => w.length > 0);
|
|
42
|
-
// Count special characters that typically become separate tokens
|
|
43
|
-
const specialChars = (text.match(/[{}()\[\]<>:;,."'`@#$%^&*+=|\\/?!~-]/g) || []).length;
|
|
44
|
-
// Code tokens: variable names split on camelCase/snake_case
|
|
45
|
-
const codeTokens = (text.match(/[a-z][A-Z]|_[a-z]/g) || []).length;
|
|
46
|
-
// Numbers often tokenize separately
|
|
47
|
-
const numbers = (text.match(/\d+/g) || []).length;
|
|
48
|
-
// Base: words + adjustments
|
|
49
|
-
// Average English word is ~1.3 tokens, code identifiers ~1.5
|
|
50
|
-
const baseTokens = words.length * 1.3;
|
|
51
|
-
const specialTokens = specialChars * 0.5;
|
|
52
|
-
const extraCodeTokens = codeTokens * 0.3;
|
|
53
|
-
const numberTokens = numbers * 0.5;
|
|
54
|
-
return Math.ceil(baseTokens + specialTokens + extraCodeTokens + numberTokens);
|
|
55
|
-
}
|
|
44
|
+
export { estimateTokens as estimateTokensAccurate } from '../memory/context-compressor.js';
|
|
56
45
|
/**
|
|
57
46
|
* Simple stemming for keyword matching
|
|
58
47
|
* Handles common English suffixes for better fuzzy matching
|
|
@@ -60,7 +49,20 @@ export function estimateTokensAccurate(text) {
|
|
|
60
49
|
export function simpleStem(word) {
|
|
61
50
|
const lower = word.toLowerCase();
|
|
62
51
|
// Common suffixes to strip
|
|
63
|
-
const suffixes = [
|
|
52
|
+
const suffixes = [
|
|
53
|
+
'ing',
|
|
54
|
+
'ed',
|
|
55
|
+
'es',
|
|
56
|
+
's',
|
|
57
|
+
'er',
|
|
58
|
+
'est',
|
|
59
|
+
'ly',
|
|
60
|
+
'tion',
|
|
61
|
+
'ment',
|
|
62
|
+
'ness',
|
|
63
|
+
'able',
|
|
64
|
+
'ible',
|
|
65
|
+
];
|
|
64
66
|
for (const suffix of suffixes) {
|
|
65
67
|
if (lower.endsWith(suffix) && lower.length > suffix.length + 2) {
|
|
66
68
|
const stem = lower.slice(0, -suffix.length);
|
|
@@ -95,6 +97,28 @@ export function fuzzyKeywordMatch(text, keyword) {
|
|
|
95
97
|
}
|
|
96
98
|
return false;
|
|
97
99
|
}
|
|
100
|
+
/**
|
|
101
|
+
* Calculate cosine similarity between two numeric vectors.
|
|
102
|
+
* Shared implementation used by EmbeddingService and ServerlessQdrantManager.
|
|
103
|
+
* Returns a value between -1 (opposite) and 1 (identical).
|
|
104
|
+
*/
|
|
105
|
+
export function cosineSimilarity(a, b) {
|
|
106
|
+
if (a.length !== b.length) {
|
|
107
|
+
throw new Error('Vectors must have same dimensions');
|
|
108
|
+
}
|
|
109
|
+
let dotProduct = 0;
|
|
110
|
+
let normA = 0;
|
|
111
|
+
let normB = 0;
|
|
112
|
+
for (let i = 0; i < a.length; i++) {
|
|
113
|
+
dotProduct += a[i] * b[i];
|
|
114
|
+
normA += a[i] * a[i];
|
|
115
|
+
normB += b[i] * b[i];
|
|
116
|
+
}
|
|
117
|
+
const denominator = Math.sqrt(normA) * Math.sqrt(normB);
|
|
118
|
+
if (denominator === 0)
|
|
119
|
+
return 0;
|
|
120
|
+
return dotProduct / denominator;
|
|
121
|
+
}
|
|
98
122
|
/**
|
|
99
123
|
* Calculate text similarity using multiple methods
|
|
100
124
|
* Returns weighted average for more robust comparison
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"string-similarity.js","sourceRoot":"","sources":["../../src/utils/string-similarity.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAEpC;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAAC,CAAS,EAAE,CAAS;IACpD,MAAM,IAAI,GAAG,IAAI,GAAG,
|
|
1
|
+
{"version":3,"file":"string-similarity.js","sourceRoot":"","sources":["../../src/utils/string-similarity.ts"],"names":[],"mappings":"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"}
|
package/docs/INDEX.md
CHANGED
|
@@ -1,66 +1,67 @@
|
|
|
1
|
-
# UAP Documentation
|
|
1
|
+
# UAP Documentation
|
|
2
2
|
|
|
3
|
-
>
|
|
3
|
+
> @miller-tech/uap -- Documentation Hub
|
|
4
4
|
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
## Getting Started
|
|
8
8
|
|
|
9
|
-
- [Overview](getting-started/OVERVIEW.md)
|
|
10
|
-
- [Setup](getting-started/SETUP.md)
|
|
11
|
-
- [Integration](getting-started/INTEGRATION.md)
|
|
9
|
+
- [Overview](getting-started/OVERVIEW.md) -- What is UAP, core concepts, 4-layer memory architecture
|
|
10
|
+
- [Setup](getting-started/SETUP.md) -- Installation, dependencies, configuration
|
|
11
|
+
- [Integration](getting-started/INTEGRATION.md) -- Claude Code, Factory.AI, OpenCode, ForgeCode, VSCode, Cursor
|
|
12
12
|
|
|
13
13
|
## Architecture
|
|
14
14
|
|
|
15
|
-
- [System Analysis](architecture/SYSTEM_ANALYSIS.md)
|
|
16
|
-
- [Multi-Model Architecture](architecture/MULTI_MODEL.md)
|
|
17
|
-
- [UAP Protocol](architecture/UAP_PROTOCOL.md)
|
|
18
|
-
- [UAP Compliance](architecture/UAP_COMPLIANCE.md)
|
|
19
|
-
- [Strict Droids](architecture/UAP_STRICT_DROIDS.md)
|
|
15
|
+
- [System Analysis](architecture/SYSTEM_ANALYSIS.md) -- Complete UAP feature analysis and architecture
|
|
16
|
+
- [Multi-Model Architecture](architecture/MULTI_MODEL.md) -- Planner/executor two-tier design
|
|
17
|
+
- [UAP Protocol](architecture/UAP_PROTOCOL.md) -- Protocol specification and compliance requirements
|
|
18
|
+
- [UAP Compliance](architecture/UAP_COMPLIANCE.md) -- Protocol enforcement plan
|
|
19
|
+
- [Strict Droids](architecture/UAP_STRICT_DROIDS.md) -- JSON schema validation for droid definitions
|
|
20
20
|
|
|
21
21
|
## Reference
|
|
22
22
|
|
|
23
|
-
- [API Reference](reference/API_REFERENCE.md)
|
|
24
|
-
- [CLI Reference](reference/UAP_CLI_REFERENCE.md)
|
|
25
|
-
- [Feature Inventory](reference/FEATURES.md)
|
|
23
|
+
- [API Reference](reference/API_REFERENCE.md) -- CLI commands, DB schema, API endpoints
|
|
24
|
+
- [CLI Reference](reference/UAP_CLI_REFERENCE.md) -- Full CLI command reference (25 commands, 109 subcommands)
|
|
25
|
+
- [Feature Inventory](reference/FEATURES.md) -- Complete feature status and implementation details
|
|
26
|
+
- [Harness Matrix](reference/HARNESS-MATRIX.md) -- Per-harness integration details
|
|
26
27
|
|
|
27
28
|
## Deployment
|
|
28
29
|
|
|
29
|
-
- [Deployment Guide](deployment/DEPLOYMENT.md)
|
|
30
|
-
- [Deployment Strategies](deployment/DEPLOYMENT_STRATEGIES.md)
|
|
31
|
-
- [Deploy Batching](deployment/DEPLOY_BATCHING.md)
|
|
32
|
-
- [Deploy Batcher Analysis](deployment/DEPLOY_BATCHER_ANALYSIS.md)
|
|
33
|
-
- [Deploy Bucketing Analysis](deployment/DEPLOY_BUCKETING_ANALYSIS.md)
|
|
34
|
-
- [Qwen3.5 / llama.cpp](deployment/QWEN35_LLAMA_CPP.md)
|
|
30
|
+
- [Deployment Guide](deployment/DEPLOYMENT.md) -- Model providers, IaC, CI/CD pipelines
|
|
31
|
+
- [Deployment Strategies](deployment/DEPLOYMENT_STRATEGIES.md) -- Window bucketing, batch processing
|
|
32
|
+
- [Deploy Batching](deployment/DEPLOY_BATCHING.md) -- Batch windows and bucketing system
|
|
33
|
+
- [Deploy Batcher Analysis](deployment/DEPLOY_BATCHER_ANALYSIS.md) -- DeployBatcher architecture
|
|
34
|
+
- [Deploy Bucketing Analysis](deployment/DEPLOY_BUCKETING_ANALYSIS.md) -- Bucketing capability report
|
|
35
|
+
- [Qwen3.5 / llama.cpp](deployment/QWEN35_LLAMA_CPP.md) -- Local LLM deployment with LoRA fine-tuning
|
|
35
36
|
|
|
36
37
|
## Integrations
|
|
37
38
|
|
|
38
|
-
- [MCP Router](integrations/MCP_ROUTER_SETUP.md)
|
|
39
|
-
- [RTK Integration](integrations/RTK_INTEGRATION.md)
|
|
39
|
+
- [MCP Router](integrations/MCP_ROUTER_SETUP.md) -- 98% token reduction via meta-tool routing
|
|
40
|
+
- [RTK Integration](integrations/RTK_INTEGRATION.md) -- Rust Token Killer CLI proxy
|
|
40
41
|
|
|
41
42
|
## Benchmarks
|
|
42
43
|
|
|
43
|
-
- [Validation Plan](benchmarks/VALIDATION_PLAN.md)
|
|
44
|
-
- [Validation Results](benchmarks/VALIDATION_RESULTS.md)
|
|
45
|
-
- [Token Optimization](benchmarks/TOKEN_OPTIMIZATION.md)
|
|
46
|
-
- [Accuracy Analysis](benchmarks/ACCURACY_ANALYSIS.md)
|
|
44
|
+
- [Validation Plan](benchmarks/VALIDATION_PLAN.md) -- Benchmark methodology and test cases
|
|
45
|
+
- [Validation Results](benchmarks/VALIDATION_RESULTS.md) -- Benchmark results
|
|
46
|
+
- [Token Optimization](benchmarks/TOKEN_OPTIMIZATION.md) -- Per-feature token savings analysis
|
|
47
|
+
- [Accuracy Analysis](benchmarks/ACCURACY_ANALYSIS.md) -- Internal vs Terminal-Bench comparison
|
|
47
48
|
|
|
48
49
|
## Research
|
|
49
50
|
|
|
50
|
-
- [Memory Systems Comparison](research/MEMORY_SYSTEMS_COMPARISON.md)
|
|
51
|
-
- [Behavioral Patterns](research/BEHAVIORAL_PATTERNS.md)
|
|
52
|
-
- [Terminal-Bench Learnings](research/TERMINAL_BENCH_LEARNINGS.md)
|
|
53
|
-
- [Performance Analysis](research/PERFORMANCE_ANALYSIS_2026-01-18.md)
|
|
54
|
-
- [Pattern Analysis](research/PATTERN_ANALYSIS_2026-01-18.md)
|
|
55
|
-
- [Performance Test Plan](research/PERFORMANCE_TEST_PLAN.md)
|
|
56
|
-
- [Domain Strategies](research/DOMAIN_STRATEGIES.md)
|
|
51
|
+
- [Memory Systems Comparison](research/MEMORY_SYSTEMS_COMPARISON.md) -- MemGPT, LangGraph, Mem0, A-MEM analysis
|
|
52
|
+
- [Behavioral Patterns](research/BEHAVIORAL_PATTERNS.md) -- Pattern analysis from Terminal-Bench
|
|
53
|
+
- [Terminal-Bench Learnings](research/TERMINAL_BENCH_LEARNINGS.md) -- Universal agent patterns discovered
|
|
54
|
+
- [Performance Analysis](research/PERFORMANCE_ANALYSIS_2026-01-18.md) -- UAP vs baseline benchmarking
|
|
55
|
+
- [Pattern Analysis](research/PATTERN_ANALYSIS_2026-01-18.md) -- Deep failure study
|
|
56
|
+
- [Performance Test Plan](research/PERFORMANCE_TEST_PLAN.md) -- Vanilla vs UAP-enhanced test plan
|
|
57
|
+
- [Domain Strategies](research/DOMAIN_STRATEGIES.md) -- CoreWars, specialized task guides
|
|
57
58
|
|
|
58
59
|
## Operations
|
|
59
60
|
|
|
60
|
-
- [Troubleshooting](operations/TROUBLESHOOTING.md)
|
|
61
|
+
- [Troubleshooting](operations/TROUBLESHOOTING.md) -- Common issues, recovery procedures, debugging
|
|
61
62
|
|
|
62
63
|
---
|
|
63
64
|
|
|
64
65
|
## Archive
|
|
65
66
|
|
|
66
|
-
Historical documents preserved for reference in [archive/](archive/).
|
|
67
|
+
Historical documents preserved for reference in [archive/](archive/).
|
package/package.json
CHANGED
|
@@ -1,13 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@miller-tech/uap",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.10.0",
|
|
4
4
|
"description": "Autonomous AI agent memory system with CLAUDE.md protocol enforcement",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
7
7
|
"types": "dist/index.d.ts",
|
|
8
8
|
"bin": {
|
|
9
9
|
"uap": "./dist/bin/cli.js",
|
|
10
|
-
"uap-tool-calls": "./dist/bin/tool-calls.js",
|
|
11
10
|
"uap-tool-call-test": "./tools/agents/scripts/tool_call_test.py",
|
|
12
11
|
"uap-tool-call-wrapper": "./tools/agents/scripts/tool_call_wrapper.py",
|
|
13
12
|
"uap-template-verify": "./tools/agents/scripts/chat_template_verifier.py",
|
|
@@ -25,19 +24,17 @@
|
|
|
25
24
|
"lint": "eslint src --ext .ts",
|
|
26
25
|
"lint:fix": "eslint src --ext .ts --fix",
|
|
27
26
|
"format": "prettier --write src/**/*.ts",
|
|
28
|
-
"prepare": "npm run build",
|
|
29
27
|
"prepublishOnly": "npm run build && npm test",
|
|
30
|
-
"install:web": "bash scripts/install-web.sh",
|
|
31
|
-
"install:desktop": "bash scripts/install-desktop.sh",
|
|
32
|
-
"install:
|
|
33
|
-
"
|
|
34
|
-
"postinstall": "echo '\n✨ Run: npx universal-agent-protocol init --interactive'",
|
|
28
|
+
"install:web": "bash scripts/setup/install-web.sh",
|
|
29
|
+
"install:desktop": "bash scripts/setup/install-desktop.sh",
|
|
30
|
+
"install:cloakbrowser": "tsx scripts/setup/install-cloakbrowser.ts",
|
|
31
|
+
"postinstall": "echo '\n✨ Run: npx @miller-tech/uap init --interactive'",
|
|
35
32
|
"version:patch": "bash scripts/version-bump.sh patch",
|
|
36
33
|
"version:minor": "bash scripts/version-bump.sh minor",
|
|
37
34
|
"version:major": "bash scripts/version-bump.sh major",
|
|
38
|
-
"update-uap": "bash scripts/update-uap-compliance.sh",
|
|
39
|
-
"verify-uap": "bash scripts/verify-compliance.sh",
|
|
40
|
-
"check-claude": "bash scripts/verify-compliance.sh"
|
|
35
|
+
"update-uap": "bash scripts/maintenance/update-uap-compliance.sh",
|
|
36
|
+
"verify-uap": "bash scripts/maintenance/verify-compliance.sh",
|
|
37
|
+
"check-claude": "bash scripts/maintenance/verify-compliance.sh"
|
|
41
38
|
},
|
|
42
39
|
"keywords": [
|
|
43
40
|
"claude",
|
|
@@ -107,11 +104,13 @@
|
|
|
107
104
|
"files": [
|
|
108
105
|
"dist",
|
|
109
106
|
"docs",
|
|
110
|
-
"
|
|
107
|
+
"config",
|
|
111
108
|
"templates",
|
|
112
109
|
"tools/agents",
|
|
113
|
-
"scripts/
|
|
114
|
-
"scripts/
|
|
110
|
+
"scripts/setup",
|
|
111
|
+
"scripts/version-bump.sh",
|
|
112
|
+
"scripts/validate-build.sh",
|
|
113
|
+
"scripts/maintenance",
|
|
115
114
|
"README.md",
|
|
116
115
|
"LICENSE"
|
|
117
116
|
]
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# Quick NPM Publish Script - Triggers GitHub Actions Workflow
|
|
3
|
+
|
|
4
|
+
set -e
|
|
5
|
+
|
|
6
|
+
VERSION=$(node -p 'require("./package.json").version' 2>/dev/null || echo "unknown")
|
|
7
|
+
echo "=========================================="
|
|
8
|
+
echo " Universal Agent Protocol v${VERSION}"
|
|
9
|
+
echo " Publishing to NPM..."
|
|
10
|
+
echo "=========================================="
|
|
11
|
+
echo ""
|
|
12
|
+
|
|
13
|
+
REPO="DammianMiller/universal-agent-protocol"
|
|
14
|
+
WORKFLOW_ID="deploy-publish.yml"
|
|
15
|
+
|
|
16
|
+
# Check if gh CLI is installed
|
|
17
|
+
if ! command -v gh &> /dev/null; then
|
|
18
|
+
echo "❌ GitHub CLI (gh) not found!"
|
|
19
|
+
echo ""
|
|
20
|
+
echo "Install it first:"
|
|
21
|
+
echo " macOS: brew install gh"
|
|
22
|
+
echo " Linux: https://cli.github.com/"
|
|
23
|
+
echo " Windows: winget install github.cli"
|
|
24
|
+
echo ""
|
|
25
|
+
echo "Then run this script again."
|
|
26
|
+
exit 1
|
|
27
|
+
fi
|
|
28
|
+
|
|
29
|
+
# Check if logged in to GitHub
|
|
30
|
+
if ! gh auth status &> /dev/null; then
|
|
31
|
+
echo "❌ Not logged in to GitHub!"
|
|
32
|
+
echo ""
|
|
33
|
+
echo "Login first:"
|
|
34
|
+
echo " gh auth login"
|
|
35
|
+
echo ""
|
|
36
|
+
echo "Use -H flag for HTTP host if needed."
|
|
37
|
+
exit 1
|
|
38
|
+
fi
|
|
39
|
+
|
|
40
|
+
echo "✅ GitHub CLI authenticated"
|
|
41
|
+
echo ""
|
|
42
|
+
|
|
43
|
+
# Get workflow ID
|
|
44
|
+
echo "🔄 Fetching workflow information..."
|
|
45
|
+
WORKFLOW_ID=$(gh api "/repos/$REPO/actions/workflows" \
|
|
46
|
+
--jq '.workflows[] | select(.name == "Build, Test & Publish to NPM") | .id')
|
|
47
|
+
|
|
48
|
+
if [ -z "$WORKFLOW_ID" ]; then
|
|
49
|
+
echo "❌ Could not find workflow: $WORKFLOW_ID"
|
|
50
|
+
exit 1
|
|
51
|
+
fi
|
|
52
|
+
|
|
53
|
+
echo "✅ Found workflow ID: $WORKFLOW_ID"
|
|
54
|
+
echo ""
|
|
55
|
+
|
|
56
|
+
# Trigger the workflow
|
|
57
|
+
echo "🚀 Triggering publish workflow..."
|
|
58
|
+
RESPONSE=$(gh api \
|
|
59
|
+
--method POST \
|
|
60
|
+
"/repos/$REPO/actions/workflows/${WORKFLOW_ID}/dispatches" \
|
|
61
|
+
-f ref="master" \
|
|
62
|
+
-f inputs='{"publish":"true","dry_run":"false"}')
|
|
63
|
+
|
|
64
|
+
echo "$RESPONSE" | jq '.workflow_run.id' > /tmp/run_id.txt
|
|
65
|
+
RUN_ID=$(cat /tmp/run_id.txt)
|
|
66
|
+
|
|
67
|
+
if [ -z "$RUN_ID" ]; then
|
|
68
|
+
echo "❌ Failed to trigger workflow"
|
|
69
|
+
exit 1
|
|
70
|
+
fi
|
|
71
|
+
|
|
72
|
+
echo ""
|
|
73
|
+
echo "✅ Workflow triggered successfully!"
|
|
74
|
+
echo ""
|
|
75
|
+
echo "📊 Run ID: $RUN_ID"
|
|
76
|
+
echo ""
|
|
77
|
+
echo "Monitor progress at:"
|
|
78
|
+
echo "https://github.com/$REPO/actions/runs/$RUN_ID"
|
|
79
|
+
echo ""
|
|
80
|
+
echo "=========================================="
|
|
81
|
+
echo " Your NPM publish is in progress!"
|
|
82
|
+
echo "=========================================="
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
set -e
|
|
3
|
+
|
|
4
|
+
echo "🚀 Publishing universal-agent-protocol to npm..."
|
|
5
|
+
|
|
6
|
+
# Check if NPM_TOKEN is set
|
|
7
|
+
if [ -z "$NPM_TOKEN" ]; then
|
|
8
|
+
echo "❌ Error: NPM_TOKEN environment variable is not set"
|
|
9
|
+
echo " Please set it before running this script"
|
|
10
|
+
exit 1
|
|
11
|
+
fi
|
|
12
|
+
|
|
13
|
+
# Build the project
|
|
14
|
+
echo "📦 Building project..."
|
|
15
|
+
npm run build
|
|
16
|
+
|
|
17
|
+
# Run tests
|
|
18
|
+
echo "🧪 Running tests..."
|
|
19
|
+
npm test
|
|
20
|
+
|
|
21
|
+
# Run lint
|
|
22
|
+
echo "🔍 Running lint..."
|
|
23
|
+
npm run lint
|
|
24
|
+
|
|
25
|
+
# Publish to npm
|
|
26
|
+
echo "📤 Publishing to npm..."
|
|
27
|
+
npm publish --access public
|
|
28
|
+
|
|
29
|
+
echo "✅ Published successfully!"
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""Update all droids with v2.3.0 compatibility headers."""
|
|
3
|
+
|
|
4
|
+
import os
|
|
5
|
+
|
|
6
|
+
DROIDS_DIR = os.path.join(
|
|
7
|
+
os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))),
|
|
8
|
+
".factory",
|
|
9
|
+
"droids",
|
|
10
|
+
)
|
|
11
|
+
|
|
12
|
+
droids = [
|
|
13
|
+
"code-quality-guardian",
|
|
14
|
+
"debug-expert",
|
|
15
|
+
"documentation-expert",
|
|
16
|
+
"ml-training-expert",
|
|
17
|
+
"performance-optimizer",
|
|
18
|
+
"security-auditor",
|
|
19
|
+
"sysadmin-expert",
|
|
20
|
+
"terminal-bench-optimizer",
|
|
21
|
+
]
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
def update_droid_file(droid_name):
|
|
25
|
+
droid_file = os.path.join(DROIDS_DIR, f"{droid_name}.md")
|
|
26
|
+
|
|
27
|
+
if not os.path.exists(droid_file):
|
|
28
|
+
print(f" ✗ {droid_name}: File not found")
|
|
29
|
+
return False
|
|
30
|
+
|
|
31
|
+
with open(droid_file, "r", encoding="utf-8") as f:
|
|
32
|
+
content = f.read()
|
|
33
|
+
|
|
34
|
+
if "CLAUDE.md v2.3.0" in content and "@Skill:" in content:
|
|
35
|
+
print(f" - {droid_name}: Already current")
|
|
36
|
+
return True
|
|
37
|
+
|
|
38
|
+
lines = content.split("\n")
|
|
39
|
+
|
|
40
|
+
title_idx = None
|
|
41
|
+
for i, line in enumerate(lines):
|
|
42
|
+
if line.startswith("# ") or line.startswith("## "):
|
|
43
|
+
title_idx = i
|
|
44
|
+
break
|
|
45
|
+
|
|
46
|
+
if title_idx is None:
|
|
47
|
+
print(f" ⚠ {droid_name}: No heading found")
|
|
48
|
+
return False
|
|
49
|
+
|
|
50
|
+
compat_note = f"""> **Compatibility**: CLAUDE.md v2.3.0+
|
|
51
|
+
> **Integration**: Invoked via `Task(subagent_type: "{droid_name}", prompt: "...")` in PARALLEL REVIEW PROTOCOL
|
|
52
|
+
> **Skill Loading**: This droid can load domain-specific guidance via `@Skill:<skill-name>.md` when applicable
|
|
53
|
+
"""
|
|
54
|
+
|
|
55
|
+
lines.insert(title_idx + 1, compat_note)
|
|
56
|
+
|
|
57
|
+
if "MANDATORY" not in content:
|
|
58
|
+
for i, line in enumerate(lines):
|
|
59
|
+
if line.startswith("## ") and i > title_idx + 3:
|
|
60
|
+
before_section = lines[:i]
|
|
61
|
+
after_section = lines[i:]
|
|
62
|
+
|
|
63
|
+
mandatory_check = """
|
|
64
|
+
### MANDATORY Pre-Checks
|
|
65
|
+
|
|
66
|
+
Before applying this droid's guidance:
|
|
67
|
+
|
|
68
|
+
- [ ] **MANDATORY**: Worktree created (`uam worktree create <slug>`)
|
|
69
|
+
- [ ] Schema diff gate completed (if tests involved)
|
|
70
|
+
- [ ] Environment check performed
|
|
71
|
+
- [ ] Memory queried for relevant past failures
|
|
72
|
+
- [ ] Parallel review protocol followed
|
|
73
|
+
|
|
74
|
+
"""
|
|
75
|
+
lines = before_section + [mandatory_check] + after_section
|
|
76
|
+
break
|
|
77
|
+
|
|
78
|
+
with open(droid_file, "w", encoding="utf-8") as f:
|
|
79
|
+
f.write("\n".join(lines))
|
|
80
|
+
|
|
81
|
+
print(f" ✓ {droid_name}: Updated")
|
|
82
|
+
return True
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
print("=== Updating Droids for CLAUDE.md v2.3.0 ===\n")
|
|
86
|
+
|
|
87
|
+
updated = 0
|
|
88
|
+
for droid in droids:
|
|
89
|
+
if update_droid_file(droid):
|
|
90
|
+
updated += 1
|
|
91
|
+
|
|
92
|
+
print(f"\n=== Summary ===")
|
|
93
|
+
print(f"Updated: {updated}/{len(droids)} droids")
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""Update all skills with v2.3.0 compatibility headers and protocol references."""
|
|
3
|
+
|
|
4
|
+
import os
|
|
5
|
+
from pathlib import Path
|
|
6
|
+
|
|
7
|
+
SKILLS_DIR = os.path.join(
|
|
8
|
+
os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))),
|
|
9
|
+
".factory",
|
|
10
|
+
"skills",
|
|
11
|
+
)
|
|
12
|
+
|
|
13
|
+
skills_to_update = {
|
|
14
|
+
"chess-engine": ("Game AI", ["chess", "engine", "analysis", "game"]),
|
|
15
|
+
"codebase-navigator": (
|
|
16
|
+
"Navigation",
|
|
17
|
+
["navigate", "codebase", "explore", "understand"],
|
|
18
|
+
),
|
|
19
|
+
"compression": ("Algorithms", ["compress", "optimize", "size", "minify"]),
|
|
20
|
+
"git-forensics": ("Git", ["git", "history", "forensics", "recover", "blame"]),
|
|
21
|
+
"near-miss": ("Debugging", ["near miss", "bug", "error", "debug", "fix"]),
|
|
22
|
+
"polyglot": ("Localization", ["polyglot", "i18n", "l10n", "translation", "locale"]),
|
|
23
|
+
"service-config": ("Configuration", ["config", "configuration", "settings", "env"]),
|
|
24
|
+
"terminal-bench-strategies": (
|
|
25
|
+
"Benchmarking",
|
|
26
|
+
["terminal-bench", "benchmark", "test", "evaluate"],
|
|
27
|
+
),
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
def add_rtk_header(content, skill_name):
|
|
32
|
+
rtk_addition = f"""---
|
|
33
|
+
name: {skill_name}
|
|
34
|
+
version: "2.0.0"
|
|
35
|
+
compatibility: CLAUDE.md v2.3.0+
|
|
36
|
+
---
|
|
37
|
+
|
|
38
|
+
> **RTK Integration**: Supports `@hooks-session-start.md`, `@PreCompact.md`
|
|
39
|
+
|
|
40
|
+
"""
|
|
41
|
+
if content.startswith("---"):
|
|
42
|
+
end_frontmatter = content.find("---", 3)
|
|
43
|
+
if end_frontmatter > 0:
|
|
44
|
+
return (
|
|
45
|
+
content[: end_frontmatter + 3]
|
|
46
|
+
+ rtk_addition
|
|
47
|
+
+ content[end_frontmatter + 3 :]
|
|
48
|
+
)
|
|
49
|
+
return rtk_addition + content
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
def add_decision_loop_ref(content, skill_name):
|
|
53
|
+
decision_loop = f"""
|
|
54
|
+
## Protocol Integration
|
|
55
|
+
|
|
56
|
+
### DECISION LOOP Position
|
|
57
|
+
|
|
58
|
+
This skill applies at **step 5** of the DECISION LOOP:
|
|
59
|
+
|
|
60
|
+
```
|
|
61
|
+
1. CLASSIFY -> complexity? backup needed? tools?
|
|
62
|
+
2. PROTECT -> cp file file.bak (for configs, DBs)
|
|
63
|
+
3. MEMORY -> query relevant context + past failures
|
|
64
|
+
4. AGENTS -> check overlaps (if multi-agent)
|
|
65
|
+
5. SKILLS -> @Skill:{skill_name}.md for domain-specific guidance
|
|
66
|
+
6. WORK -> implement (ALWAYS use worktree for ANY file changes)
|
|
67
|
+
7. REVIEW -> self-review diff before testing
|
|
68
|
+
8. TEST -> completion gates pass
|
|
69
|
+
9. LEARN -> store outcome in memory
|
|
70
|
+
```
|
|
71
|
+
"""
|
|
72
|
+
if "# " in content:
|
|
73
|
+
first_heading = content.find("# ")
|
|
74
|
+
return content[:first_heading] + decision_loop + content[first_heading:]
|
|
75
|
+
return content
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
def add_uam_compliance(content):
|
|
79
|
+
uam_section = """
|
|
80
|
+
## UAM Protocol Compliance
|
|
81
|
+
|
|
82
|
+
### MANDATORY Worktree Enforcement
|
|
83
|
+
|
|
84
|
+
Before applying this skill:
|
|
85
|
+
- [ ] **MANDATORY**: Worktree created (`uam worktree create <slug>`)
|
|
86
|
+
- [ ] Schema diff gate completed (if tests involved)
|
|
87
|
+
- [ ] Environment check performed
|
|
88
|
+
- [ ] Memory queried for relevant past failures
|
|
89
|
+
|
|
90
|
+
### Completion Gates Checklist
|
|
91
|
+
|
|
92
|
+
```
|
|
93
|
+
[x] Schema diffed against test expectations
|
|
94
|
+
[x] Tests: X/Y (must be 100%, run 3+ times)
|
|
95
|
+
[x] Outputs verified: ls -la
|
|
96
|
+
[x] Worktree created and PR prepared
|
|
97
|
+
[x] MANDATORY cleanup after PR merge
|
|
98
|
+
```
|
|
99
|
+
"""
|
|
100
|
+
if "## Common Pitfalls" in content:
|
|
101
|
+
return content.replace(
|
|
102
|
+
"## Common Pitfalls", uam_section + "\n## Common Pitfalls"
|
|
103
|
+
)
|
|
104
|
+
if "## References" in content:
|
|
105
|
+
return content.replace("## References", uam_section + "\n## References")
|
|
106
|
+
return content + "\n\n" + uam_section
|
|
107
|
+
|
|
108
|
+
|
|
109
|
+
def update_skill_file(skill_dir, skill_name):
|
|
110
|
+
skill_file = os.path.join(skill_dir, "SKILL.md")
|
|
111
|
+
|
|
112
|
+
if not os.path.exists(skill_file):
|
|
113
|
+
print(f" ✗ {skill_name}: SKILL.md not found")
|
|
114
|
+
return False
|
|
115
|
+
|
|
116
|
+
with open(skill_file, "r", encoding="utf-8") as f:
|
|
117
|
+
content = f.read()
|
|
118
|
+
|
|
119
|
+
original_content = content
|
|
120
|
+
content = add_rtk_header(content, skill_name)
|
|
121
|
+
content = add_decision_loop_ref(content, skill_name)
|
|
122
|
+
content = add_uam_compliance(content)
|
|
123
|
+
|
|
124
|
+
if content != original_content:
|
|
125
|
+
with open(skill_file, "w", encoding="utf-8") as f:
|
|
126
|
+
f.write(content)
|
|
127
|
+
print(f" ✓ {skill_name}: Updated")
|
|
128
|
+
return True
|
|
129
|
+
|
|
130
|
+
print(f" - {skill_name}: Already updated")
|
|
131
|
+
return False
|
|
132
|
+
|
|
133
|
+
|
|
134
|
+
print("=== Updating Skills for CLAUDE.md v2.3.0 ===\n")
|
|
135
|
+
|
|
136
|
+
updated = 0
|
|
137
|
+
for skill_name, (category, triggers) in skills_to_update.items():
|
|
138
|
+
skill_dir = os.path.join(SKILLS_DIR, skill_name)
|
|
139
|
+
|
|
140
|
+
if not os.path.exists(skill_dir):
|
|
141
|
+
print(f" ✗ {skill_name}: Directory not found")
|
|
142
|
+
continue
|
|
143
|
+
|
|
144
|
+
if update_skill_file(skill_dir, skill_name):
|
|
145
|
+
updated += 1
|
|
146
|
+
|
|
147
|
+
print(f"\n=== Summary ===")
|
|
148
|
+
print(f"Updated: {updated}/{len(skills_to_update)} skills")
|