@contextium/cli 1.0.3 → 1.0.5
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.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"new-file.d.ts","sourceRoot":"","sources":["../../src/commands/new-file.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAMnC,eAAO,MAAM,cAAc,
|
|
1
|
+
{"version":3,"file":"new-file.d.ts","sourceRoot":"","sources":["../../src/commands/new-file.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAMnC,eAAO,MAAM,cAAc,SA+FvB,CAAA"}
|
|
@@ -8,8 +8,9 @@ export const newFileCommand = new Command('new')
|
|
|
8
8
|
.argument('<library>', 'Context library/project name or slug')
|
|
9
9
|
.requiredOption('-t, --title <title>', 'File title')
|
|
10
10
|
.requiredOption('-p, --path <path>', 'File path (e.g. "guide.md")')
|
|
11
|
-
.option('-c, --content <text>', 'File content')
|
|
11
|
+
.option('-c, --content <text>', 'File content (avoid for long or multi-line content — use --stdin or -f instead)')
|
|
12
12
|
.option('-f, --from-file <filepath>', 'Read content from a local file')
|
|
13
|
+
.option('--stdin', 'Read content from stdin (pipe content in)')
|
|
13
14
|
.option('-w, --workspace <slug>', 'Workspace name or slug')
|
|
14
15
|
.option('--folder <id>', 'Folder ID to place file in')
|
|
15
16
|
.action(async (libraryName, options) => {
|
|
@@ -43,13 +44,23 @@ export const newFileCommand = new Command('new')
|
|
|
43
44
|
spinner.fail(`Context library '${libraryName}' not found`);
|
|
44
45
|
process.exit(1);
|
|
45
46
|
}
|
|
46
|
-
// Read content
|
|
47
|
+
// Read content — stdin takes priority, then -f, then -c
|
|
47
48
|
let content = options.content || '';
|
|
48
49
|
if (options.fromFile) {
|
|
49
50
|
content = await fs.readFile(options.fromFile, 'utf-8');
|
|
50
51
|
}
|
|
51
|
-
if (
|
|
52
|
-
spinner.
|
|
52
|
+
if (options.stdin) {
|
|
53
|
+
spinner.stop();
|
|
54
|
+
content = await new Promise((resolve, reject) => {
|
|
55
|
+
const chunks = [];
|
|
56
|
+
process.stdin.on('data', (chunk) => chunks.push(chunk));
|
|
57
|
+
process.stdin.on('end', () => resolve(Buffer.concat(chunks).toString('utf-8')));
|
|
58
|
+
process.stdin.on('error', reject);
|
|
59
|
+
});
|
|
60
|
+
spinner.start();
|
|
61
|
+
}
|
|
62
|
+
if (!content || content.trim() === '') {
|
|
63
|
+
spinner.fail('File content is required. Use --stdin (pipe content in), -f <filepath>, or -c <text>.');
|
|
53
64
|
process.exit(1);
|
|
54
65
|
}
|
|
55
66
|
const data = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"new-file.js","sourceRoot":"","sources":["../../src/commands/new-file.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAA;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,EAAE,MAAM,aAAa,CAAA;AAE5B,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,OAAO,CAAC,KAAK,CAAC;KAC7C,WAAW,CAAC,kDAAkD,CAAC;KAC/D,QAAQ,CAAC,WAAW,EAAE,sCAAsC,CAAC;KAC7D,cAAc,CAAC,qBAAqB,EAAE,YAAY,CAAC;KACnD,cAAc,CAAC,mBAAmB,EAAE,6BAA6B,CAAC;KAClE,MAAM,CAAC,sBAAsB,EAAE,
|
|
1
|
+
{"version":3,"file":"new-file.js","sourceRoot":"","sources":["../../src/commands/new-file.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -3,71 +3,100 @@ name: ium:marketplace
|
|
|
3
3
|
description: Browse, install, or publish skills, agents, and MCP servers on the Contextium Marketplace
|
|
4
4
|
allowed-tools:
|
|
5
5
|
- Bash
|
|
6
|
+
- mcp__contextium__search_marketplace
|
|
7
|
+
- mcp__contextium__get_marketplace_listing
|
|
8
|
+
- mcp__contextium__install_marketplace_listing
|
|
9
|
+
- mcp__contextium__list_agents
|
|
10
|
+
- mcp__contextium__list_skills
|
|
6
11
|
- AskUserQuestion
|
|
7
12
|
---
|
|
8
13
|
|
|
9
14
|
<objective>
|
|
10
|
-
|
|
15
|
+
Help the user find and install the right tools from the Contextium Marketplace using natural language. Do not dump category lists — understand what they're trying to do and surface the best 5 matches across all types (skills, agents, MCP servers).
|
|
11
16
|
</objective>
|
|
12
17
|
|
|
13
18
|
<process>
|
|
14
19
|
|
|
15
20
|
<step name="choose_action">
|
|
16
|
-
Ask
|
|
17
|
-
- Question: "What would you like to do on the Marketplace?"
|
|
21
|
+
Ask: "What would you like to do on the Marketplace?"
|
|
18
22
|
- Options:
|
|
19
|
-
- "
|
|
20
|
-
- "Publish — share a skill, agent, or MCP server
|
|
21
|
-
- "My installs — see what's
|
|
23
|
+
- "Find & install — I'll describe what I need"
|
|
24
|
+
- "Publish — share a skill, agent, or MCP server"
|
|
25
|
+
- "My installs — see what's in my workspace"
|
|
22
26
|
</step>
|
|
23
27
|
|
|
24
|
-
<step name="
|
|
25
|
-
If
|
|
28
|
+
<step name="find_and_install">
|
|
29
|
+
If Find & install selected:
|
|
26
30
|
|
|
27
|
-
Ask: "What
|
|
28
|
-
- Options: "Skill", "Agent", "MCP Server", "Any"
|
|
31
|
+
Ask: "What are you looking for? Describe what you want to do or what problem you want to solve."
|
|
29
32
|
|
|
30
|
-
|
|
33
|
+
Wait for a natural language response. Examples: "I want to plan and research my project", "I need something to help with writing", "I want to analyse customer feedback".
|
|
31
34
|
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
35
|
+
From their description, infer intent and search intelligently:
|
|
36
|
+
|
|
37
|
+
1. Silently fetch what the user already has in their workspace:
|
|
38
|
+
- **CLI:** `contextium skills list -w <workspace> 2>/dev/null` and `contextium agents list -w <workspace> 2>/dev/null`
|
|
39
|
+
- **MCP:** call list_skills and list_agents
|
|
40
|
+
|
|
41
|
+
2. Search the marketplace across all types using the user's keywords:
|
|
42
|
+
- **CLI:** `contextium marketplace list -q "<extracted keywords>" 2>/dev/null`
|
|
43
|
+
- **MCP:** call mcp__contextium__search_marketplace with the extracted keywords
|
|
44
|
+
|
|
45
|
+
3. Decide which type(s) to prioritise based on what the user described:
|
|
46
|
+
- If they want to extend Claude's capabilities (web access, file parsing, external APIs) → prioritise MCP servers
|
|
47
|
+
- If they want a specialist assistant persona → prioritise agents
|
|
48
|
+
- If they want reusable knowledge or instructions → prioritise skills
|
|
49
|
+
- If something relevant already exists in their workspace → flag it as "you already have this" and skip suggesting it
|
|
36
50
|
|
|
37
|
-
|
|
51
|
+
4. From all results, pick the top 5 that best match the intent. If fewer than 5 good matches exist, only show what's relevant — do not pad with irrelevant results.
|
|
52
|
+
|
|
53
|
+
Present results like this:
|
|
38
54
|
|
|
39
|
-
To see full details of a specific listing:
|
|
40
|
-
```bash
|
|
41
|
-
contextium marketplace show <slug>
|
|
42
55
|
```
|
|
56
|
+
Here are the best matches for what you described:
|
|
57
|
+
|
|
58
|
+
1. **Name** (type: skill / agent / mcp)
|
|
59
|
+
What it does and why it fits what you described.
|
|
60
|
+
|
|
61
|
+
2. **Name** (type: ...)
|
|
62
|
+
...
|
|
43
63
|
|
|
44
|
-
|
|
45
|
-
```bash
|
|
46
|
-
contextium marketplace install <slug> -w <workspace>
|
|
64
|
+
↗ Already in your workspace: "Name" — this already covers part of what you need.
|
|
47
65
|
```
|
|
48
66
|
|
|
49
|
-
|
|
67
|
+
Ask: "Which would you like to install? Give me a number, or say skip."
|
|
68
|
+
|
|
69
|
+
If the user picks one, fetch full details and install:
|
|
70
|
+
- **CLI:** `contextium marketplace show <slug>` then `contextium marketplace install <slug> -w <workspace>`
|
|
71
|
+
- **MCP:** call get_marketplace_listing then install_marketplace_listing
|
|
72
|
+
|
|
73
|
+
Confirm: `✓ Installed "<Name>" into your workspace.`
|
|
74
|
+
|
|
75
|
+
Ask if they want to install another from the list or search for something different.
|
|
50
76
|
</step>
|
|
51
77
|
|
|
52
78
|
<step name="publish">
|
|
53
79
|
If Publish selected:
|
|
54
80
|
|
|
55
|
-
The CLI does not support publishing — direct the user to the web marketplace.
|
|
56
|
-
|
|
57
81
|
"Publishing is done via the web UI. Go to https://contextium.io/marketplace and click 'Publish' to share your skill, agent, or MCP server."
|
|
58
82
|
</step>
|
|
59
83
|
|
|
60
84
|
<step name="my_installs">
|
|
61
85
|
If My installs selected:
|
|
62
86
|
|
|
63
|
-
|
|
87
|
+
Silently fetch the workspace's skills and agents:
|
|
88
|
+
- **CLI:** `contextium skills list -w <workspace> 2>/dev/null` and `contextium agents list -w <workspace> 2>/dev/null`
|
|
89
|
+
- **MCP:** call list_skills and list_agents
|
|
64
90
|
|
|
65
|
-
|
|
66
|
-
contextium skills list -w <workspace>
|
|
67
|
-
contextium agents list -w <workspace>
|
|
68
|
-
```
|
|
69
|
-
|
|
70
|
-
Show what's available and offer to install more from the marketplace.
|
|
91
|
+
Show a clean list grouped by type. Offer to search for more.
|
|
71
92
|
</step>
|
|
72
93
|
|
|
73
94
|
</process>
|
|
95
|
+
|
|
96
|
+
<rules>
|
|
97
|
+
- Never ask the user to pick a type (skill / agent / MCP) — infer it from what they describe
|
|
98
|
+
- Never show all marketplace items — always filter to top 5 relevant results
|
|
99
|
+
- Always check what the user already has before suggesting installs
|
|
100
|
+
- Do not show raw CLI output, IDs, or slugs to the user
|
|
101
|
+
- If search returns nothing useful, say so and ask them to rephrase
|
|
102
|
+
</rules>
|
|
@@ -170,6 +170,15 @@ contextium tag-type create "<name>" --workspace <slug>
|
|
|
170
170
|
**MCP:** use the corresponding create_* tools for each resource type.
|
|
171
171
|
</step>
|
|
172
172
|
|
|
173
|
+
<step name="load_workflow">
|
|
174
|
+
After all resources are created, automatically load the workflow without asking the user. Run silently:
|
|
175
|
+
|
|
176
|
+
**CLI:** `contextium workflow load "<workflow-name>" --workspace <slug> 2>/dev/null`
|
|
177
|
+
**MCP:** call mcp__contextium__load_workflow with the workflow name and workspace.
|
|
178
|
+
|
|
179
|
+
Do not tell the user to load it themselves — just load it as part of setup.
|
|
180
|
+
</step>
|
|
181
|
+
|
|
173
182
|
<step name="summary">
|
|
174
183
|
Show a clean final summary:
|
|
175
184
|
|
|
@@ -181,9 +190,7 @@ Libraries: <list — new + reused>
|
|
|
181
190
|
Agents: <list — new + reused, or none>
|
|
182
191
|
Skills: <list — new + reused, or none>
|
|
183
192
|
Tags: <list, or none>
|
|
184
|
-
Workflow: <name>
|
|
185
|
-
|
|
186
|
-
Load it anytime with /ium:workflow.
|
|
193
|
+
Workflow: <name> — loaded and ready
|
|
187
194
|
```
|
|
188
195
|
|
|
189
196
|
If anything failed to create, add a single line at the end:
|
package/skills/ium/new.md
CHANGED
|
@@ -6,24 +6,26 @@ allowed-tools:
|
|
|
6
6
|
---
|
|
7
7
|
|
|
8
8
|
<objective>
|
|
9
|
-
Create a new file in a Contextium context library. Always
|
|
9
|
+
Create a new file in a Contextium context library. Always pipe content via stdin using a single-quoted heredoc — never use -c to inline content as special characters will be mangled by the shell.
|
|
10
10
|
</objective>
|
|
11
11
|
|
|
12
12
|
<process>
|
|
13
|
-
|
|
14
|
-
|
|
13
|
+
If the user has not specified a library, list available libraries first:
|
|
15
14
|
```bash
|
|
16
|
-
contextium
|
|
15
|
+
contextium libraries -w <workspace>
|
|
17
16
|
```
|
|
18
17
|
|
|
19
|
-
|
|
18
|
+
Then create the file by piping content through stdin using a single-quoted heredoc (the `'EOF'` quotes prevent all shell interpolation):
|
|
19
|
+
|
|
20
20
|
```bash
|
|
21
|
-
contextium
|
|
21
|
+
cat << 'EOF' | contextium new <library-name> -t "<title>" -p "<path.md>" --stdin -w <workspace>
|
|
22
|
+
<full file content here>
|
|
23
|
+
EOF
|
|
22
24
|
```
|
|
23
25
|
|
|
24
26
|
Rules:
|
|
25
|
-
- ALWAYS
|
|
26
|
-
- The
|
|
27
|
-
-
|
|
27
|
+
- ALWAYS use the heredoc+stdin pattern — never use -c to pass content inline
|
|
28
|
+
- The single quotes around EOF (`<< 'EOF'`) are mandatory — they prevent shell interpolation of $variables, backticks, and special characters
|
|
29
|
+
- Write the complete, fully-formed content inside the heredoc — not a placeholder
|
|
28
30
|
- If no workspace is set in .contextiumrc, ask the user which workspace to use
|
|
29
31
|
</process>
|