@sage-protocol/cli 0.2.9 → 0.3.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.
- package/dist/cli/commands/config.js +28 -0
- package/dist/cli/commands/doctor.js +87 -8
- package/dist/cli/commands/gov-config.js +81 -0
- package/dist/cli/commands/governance.js +152 -72
- package/dist/cli/commands/library.js +9 -0
- package/dist/cli/commands/proposals.js +187 -17
- package/dist/cli/commands/skills.js +737 -0
- package/dist/cli/commands/subdao.js +96 -132
- package/dist/cli/config/playbooks.json +62 -0
- package/dist/cli/config.js +15 -0
- package/dist/cli/governance-manager.js +25 -4
- package/dist/cli/index.js +6 -7
- package/dist/cli/library-manager.js +79 -0
- package/dist/cli/mcp-server-stdio.js +1387 -166
- package/dist/cli/schemas/manifest.schema.json +55 -0
- package/dist/cli/services/doctor/fixers.js +134 -0
- package/dist/cli/services/governance/doctor.js +140 -0
- package/dist/cli/services/governance/playbooks.js +97 -0
- package/dist/cli/services/mcp/bulk-operations.js +272 -0
- package/dist/cli/services/mcp/dependency-analyzer.js +202 -0
- package/dist/cli/services/mcp/library-listing.js +2 -2
- package/dist/cli/services/mcp/local-prompt-collector.js +1 -0
- package/dist/cli/services/mcp/manifest-downloader.js +5 -3
- package/dist/cli/services/mcp/manifest-fetcher.js +17 -1
- package/dist/cli/services/mcp/manifest-workflows.js +127 -15
- package/dist/cli/services/mcp/quick-start.js +287 -0
- package/dist/cli/services/mcp/stdio-runner.js +30 -5
- package/dist/cli/services/mcp/template-manager.js +156 -0
- package/dist/cli/services/mcp/templates/default-templates.json +84 -0
- package/dist/cli/services/mcp/tool-args-validator.js +56 -0
- package/dist/cli/services/mcp/trending-formatter.js +1 -1
- package/dist/cli/services/mcp/unified-prompt-search.js +2 -2
- package/dist/cli/services/metaprompt/designer.js +12 -5
- package/dist/cli/services/skills/discovery.js +99 -0
- package/dist/cli/services/subdao/applier.js +229 -0
- package/dist/cli/services/subdao/planner.js +142 -0
- package/dist/cli/subdao-manager.js +14 -0
- package/dist/cli/utils/aliases.js +28 -6
- package/dist/cli/utils/contract-error-decoder.js +61 -0
- package/dist/cli/utils/suggestions.js +25 -13
- package/package.json +3 -2
- package/src/schemas/manifest.schema.json +55 -0
|
@@ -43,27 +43,39 @@ const catalog = {
|
|
|
43
43
|
const manifestCID = ctx.manifestCID || ctx.cid || '<manifest-cid>';
|
|
44
44
|
const proposalId = ctx.proposalId && ctx.proposalId !== 'scheduled' ? ctx.proposalId : null;
|
|
45
45
|
const subdao = normalizeAddress(ctx.subdao);
|
|
46
|
-
const
|
|
47
|
-
|
|
48
|
-
|
|
46
|
+
const route = ctx.route || (proposalId ? 'governance' : 'operator');
|
|
47
|
+
const appBase = ensureString(process.env.SAGE_APP_BASE_URL || 'https://app.sageprotocol.io');
|
|
48
|
+
const daoUrl = subdao && appBase ? `${appBase}/daos/${subdao}` : null;
|
|
49
|
+
const proposalUrl = proposalId && appBase && ctx.governor
|
|
50
|
+
? `${appBase}/governance/${proposalId}?gov=${normalizeAddress(ctx.governor) || ctx.governor}`
|
|
51
|
+
: null;
|
|
52
|
+
const baseSuggestions = [];
|
|
49
53
|
|
|
50
|
-
if (proposalId) {
|
|
54
|
+
if (proposalId && route === 'governance') {
|
|
55
|
+
// Community/Governor proposal path
|
|
56
|
+
baseSuggestions.push(subdao ? `sage proposals inbox --subdao ${subdao}` : 'sage proposals inbox --subdao <subdao-address>');
|
|
57
|
+
baseSuggestions.push(subdao ? `sage proposals vote ${proposalId} for --subdao ${subdao}` : `sage proposals vote ${proposalId} for --subdao <subdao-address>`);
|
|
58
|
+
baseSuggestions.push(subdao ? `sage proposals execute ${proposalId} --subdao ${subdao}` : `sage proposals execute ${proposalId} --subdao <subdao-address>`);
|
|
59
|
+
} else if (route === 'operator' && subdao) {
|
|
60
|
+
// Team/Safe operator path (scheduled via Timelock)
|
|
61
|
+
baseSuggestions.push(`sage timelock list --subdao ${subdao}`);
|
|
62
|
+
baseSuggestions.push(`sage library status --subdao ${subdao}`);
|
|
63
|
+
} else if (proposalId) {
|
|
64
|
+
// Fallback to governance commands if proposals not available
|
|
51
65
|
baseSuggestions.push(`sage governance vote ${proposalId}`);
|
|
52
66
|
baseSuggestions.push(`sage governance queue ${proposalId}`);
|
|
53
|
-
baseSuggestions.push(`sage
|
|
54
|
-
} else {
|
|
55
|
-
baseSuggestions.push(subdao ? `sage timelock list --subdao ${subdao}` : 'sage timelock list --subdao <subdao-address>');
|
|
56
|
-
baseSuggestions.push(subdao ? `sage timelock execute --subdao ${subdao}` : 'sage timelock execute --subdao <subdao-address>');
|
|
67
|
+
baseSuggestions.push(`sage governance execute ${proposalId}`);
|
|
57
68
|
}
|
|
58
69
|
|
|
59
70
|
return {
|
|
60
71
|
suggestions: baseSuggestions,
|
|
61
72
|
quickActions: [
|
|
62
|
-
proposalId ? { label: '
|
|
63
|
-
proposalId ? { label: 'Check proposal status', command: `sage governance status ${proposalId}` } : null,
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
73
|
+
proposalId && route === 'governance' ? { label: 'Preview proposal', command: subdao ? `sage proposals preview ${proposalId} --subdao ${subdao}` : `sage proposals preview ${proposalId}` } : null,
|
|
74
|
+
proposalId && route === 'governance' ? { label: 'Check proposal status', command: `sage governance status ${proposalId}` } : null,
|
|
75
|
+
route === 'operator' && subdao ? { label: 'Monitor timelock queue', command: `sage timelock list --subdao ${subdao}` } : null,
|
|
76
|
+
manifestCID && ctx.previousCid ? { label: 'Review manifest diff', command: `sage library diff ${ctx.previousCid} ${manifestCID}` } : null,
|
|
77
|
+
daoUrl ? { label: 'Open DAO in app', command: daoUrl } : null,
|
|
78
|
+
proposalUrl ? { label: 'Open proposal in app', command: proposalUrl } : null
|
|
67
79
|
]
|
|
68
80
|
};
|
|
69
81
|
},
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sage-protocol/cli",
|
|
3
|
-
"version": "0.2
|
|
3
|
+
"version": "0.3.2",
|
|
4
4
|
"description": "Sage Protocol CLI for managing AI prompt libraries",
|
|
5
5
|
"bin": {
|
|
6
6
|
"sage": "./bin/sage.js"
|
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
"files": [
|
|
9
9
|
"bin/",
|
|
10
10
|
"dist/",
|
|
11
|
+
"src/schemas/",
|
|
11
12
|
"README.md"
|
|
12
13
|
],
|
|
13
14
|
"repository": {
|
|
@@ -57,4 +58,4 @@
|
|
|
57
58
|
"node": ">=18"
|
|
58
59
|
},
|
|
59
60
|
"type": "commonjs"
|
|
60
|
-
}
|
|
61
|
+
}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://sage-protocol.org/schemas/manifest.schema.json",
|
|
4
|
+
"title": "Sage Library Manifest",
|
|
5
|
+
"type": "object",
|
|
6
|
+
"required": ["version", "library", "prompts"],
|
|
7
|
+
"additionalProperties": true,
|
|
8
|
+
"properties": {
|
|
9
|
+
"version": {
|
|
10
|
+
"anyOf": [
|
|
11
|
+
{ "type": "string", "const": "2.0.0" },
|
|
12
|
+
{ "type": "integer", "const": 2 }
|
|
13
|
+
]
|
|
14
|
+
},
|
|
15
|
+
"library": {
|
|
16
|
+
"type": "object",
|
|
17
|
+
"required": ["name"],
|
|
18
|
+
"additionalProperties": true,
|
|
19
|
+
"properties": {
|
|
20
|
+
"name": { "type": "string", "minLength": 1 },
|
|
21
|
+
"description": { "type": "string" },
|
|
22
|
+
"previous": { "type": "string" }
|
|
23
|
+
}
|
|
24
|
+
},
|
|
25
|
+
"prompts": {
|
|
26
|
+
"type": "array",
|
|
27
|
+
"minItems": 0,
|
|
28
|
+
"items": {
|
|
29
|
+
"type": "object",
|
|
30
|
+
"required": ["key"],
|
|
31
|
+
"additionalProperties": true,
|
|
32
|
+
"properties": {
|
|
33
|
+
"key": { "type": "string", "minLength": 1 },
|
|
34
|
+
"cid": { "type": "string", "minLength": 46 },
|
|
35
|
+
"name": { "type": "string" },
|
|
36
|
+
"description": { "type": "string" },
|
|
37
|
+
"tags": {
|
|
38
|
+
"type": "array",
|
|
39
|
+
"items": { "type": "string", "minLength": 1 }
|
|
40
|
+
},
|
|
41
|
+
"files": {
|
|
42
|
+
"type": "array",
|
|
43
|
+
"items": { "type": "string", "minLength": 1 },
|
|
44
|
+
"minItems": 0
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
},
|
|
49
|
+
"compositions": { "type": "object" },
|
|
50
|
+
"dependencies": {
|
|
51
|
+
"type": "array",
|
|
52
|
+
"items": { "type": "string" }
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|