@sage-protocol/cli 0.3.0 → 0.3.3

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 (37) hide show
  1. package/dist/cli/commands/doctor.js +87 -8
  2. package/dist/cli/commands/gov-config.js +81 -0
  3. package/dist/cli/commands/governance.js +152 -72
  4. package/dist/cli/commands/library.js +9 -0
  5. package/dist/cli/commands/proposals.js +187 -17
  6. package/dist/cli/commands/skills.js +175 -21
  7. package/dist/cli/commands/subdao.js +22 -2
  8. package/dist/cli/config/playbooks.json +15 -0
  9. package/dist/cli/governance-manager.js +25 -4
  10. package/dist/cli/index.js +5 -6
  11. package/dist/cli/library-manager.js +79 -0
  12. package/dist/cli/mcp-server-stdio.js +1655 -82
  13. package/dist/cli/schemas/manifest.schema.json +55 -0
  14. package/dist/cli/services/doctor/fixers.js +134 -0
  15. package/dist/cli/services/mcp/bulk-operations.js +272 -0
  16. package/dist/cli/services/mcp/dependency-analyzer.js +202 -0
  17. package/dist/cli/services/mcp/library-listing.js +2 -2
  18. package/dist/cli/services/mcp/local-prompt-collector.js +1 -0
  19. package/dist/cli/services/mcp/manifest-downloader.js +5 -3
  20. package/dist/cli/services/mcp/manifest-fetcher.js +17 -1
  21. package/dist/cli/services/mcp/manifest-workflows.js +127 -15
  22. package/dist/cli/services/mcp/quick-start.js +287 -0
  23. package/dist/cli/services/mcp/stdio-runner.js +30 -5
  24. package/dist/cli/services/mcp/template-manager.js +156 -0
  25. package/dist/cli/services/mcp/templates/default-templates.json +84 -0
  26. package/dist/cli/services/mcp/tool-args-validator.js +66 -0
  27. package/dist/cli/services/mcp/trending-formatter.js +1 -1
  28. package/dist/cli/services/mcp/unified-prompt-search.js +2 -2
  29. package/dist/cli/services/metaprompt/designer.js +12 -5
  30. package/dist/cli/services/subdao/applier.js +208 -196
  31. package/dist/cli/services/subdao/planner.js +41 -6
  32. package/dist/cli/subdao-manager.js +14 -0
  33. package/dist/cli/utils/aliases.js +17 -2
  34. package/dist/cli/utils/contract-error-decoder.js +61 -0
  35. package/dist/cli/utils/suggestions.js +17 -12
  36. package/package.json +3 -2
  37. package/src/schemas/manifest.schema.json +55 -0
@@ -43,31 +43,36 @@ 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 route = ctx.route || (proposalId ? 'governance' : 'operator');
46
47
  const appBase = ensureString(process.env.SAGE_APP_BASE_URL || 'https://app.sageprotocol.io');
47
48
  const daoUrl = subdao && appBase ? `${appBase}/daos/${subdao}` : null;
48
49
  const proposalUrl = proposalId && appBase && ctx.governor
49
50
  ? `${appBase}/governance/${proposalId}?gov=${normalizeAddress(ctx.governor) || ctx.governor}`
50
51
  : null;
51
- const baseSuggestions = [
52
- `sage library status ${manifestCID}`
53
- ];
52
+ const baseSuggestions = [];
54
53
 
55
- 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
56
65
  baseSuggestions.push(`sage governance vote ${proposalId}`);
57
66
  baseSuggestions.push(`sage governance queue ${proposalId}`);
58
- baseSuggestions.push(`sage timelock execute ${proposalId}`);
59
- } else {
60
- baseSuggestions.push(subdao ? `sage timelock list --subdao ${subdao}` : 'sage timelock list --subdao <subdao-address>');
61
- baseSuggestions.push(subdao ? `sage timelock execute --subdao ${subdao}` : 'sage timelock execute --subdao <subdao-address>');
67
+ baseSuggestions.push(`sage governance execute ${proposalId}`);
62
68
  }
63
69
 
64
70
  return {
65
71
  suggestions: baseSuggestions,
66
72
  quickActions: [
67
- proposalId ? { label: 'Watch proposal lifecycle', command: `sage governance watch ${proposalId}` } : null,
68
- proposalId ? { label: 'Check proposal status', command: `sage governance status ${proposalId}` } : null,
69
- proposalId ? { label: 'Inspect proposal details', command: `sage governance inspect ${proposalId}` } : null,
70
- !proposalId ? { label: 'Monitor timelock queue', command: subdao ? `sage timelock list --subdao ${subdao}` : 'sage timelock list --subdao <subdao-address>' } : null,
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,
71
76
  manifestCID && ctx.previousCid ? { label: 'Review manifest diff', command: `sage library diff ${ctx.previousCid} ${manifestCID}` } : null,
72
77
  daoUrl ? { label: 'Open DAO in app', command: daoUrl } : null,
73
78
  proposalUrl ? { label: 'Open proposal in app', command: proposalUrl } : null
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sage-protocol/cli",
3
- "version": "0.3.0",
3
+ "version": "0.3.3",
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
+ }