@mmmbuto/qwen-code-termux 0.16.1-termux → 0.18.0-termux
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 +79 -109
- package/bundled/new-app/SKILL.md +22 -0
- package/bundled/qc-helper/SKILL.md +29 -24
- package/bundled/qc-helper/docs/_meta.ts +1 -0
- package/bundled/qc-helper/docs/configuration/_meta.ts +0 -3
- package/bundled/qc-helper/docs/configuration/settings.md +37 -31
- package/bundled/qc-helper/docs/configuration/themes.md +39 -0
- package/bundled/qc-helper/docs/features/_meta.ts +1 -3
- package/bundled/qc-helper/docs/features/approval-mode.md +35 -35
- package/bundled/qc-helper/docs/features/auto-mode.md +54 -9
- package/bundled/qc-helper/docs/features/channels/_meta.ts +1 -0
- package/bundled/qc-helper/docs/features/channels/feishu.md +170 -0
- package/bundled/qc-helper/docs/features/commands.md +115 -35
- package/bundled/qc-helper/docs/features/followup-suggestions.md +2 -2
- package/bundled/qc-helper/docs/features/headless.md +32 -0
- package/bundled/qc-helper/docs/features/markdown-rendering.md +21 -1
- package/bundled/qc-helper/docs/features/memory.md +22 -5
- package/bundled/qc-helper/docs/features/scheduled-tasks.md +1 -1
- package/bundled/qc-helper/docs/features/status-line.md +168 -32
- package/bundled/qc-helper/docs/features/sub-agents.md +60 -0
- package/bundled/qc-helper/docs/features/worktree.md +345 -0
- package/bundled/qc-helper/docs/overview.md +4 -4
- package/bundled/qc-helper/docs/quickstart.md +4 -4
- package/bundled/qc-helper/docs/qwen-serve-deploy-local.md +221 -0
- package/bundled/qc-helper/docs/qwen-serve.md +234 -24
- package/bundled/qc-helper/docs/reference/keyboard-shortcuts.md +16 -0
- package/bundled/qc-helper/docs/support/Uninstall.md +19 -1
- package/bundled/qc-helper/docs/support/troubleshooting.md +2 -1
- package/bundled/simplify/SKILL.md +123 -0
- package/chunks/agent-IDS4HMOX.js +56 -0
- package/chunks/agent-headless-5Q2EUSPS.js +50 -0
- package/chunks/{anthropicContentGenerator-SSGKR6DO.js → anthropicContentGenerator-2HBRNQ3B.js} +52 -9
- package/chunks/{askUserQuestion-PJWUUXKN.js → askUserQuestion-75TDJVK2.js} +45 -3
- package/chunks/{ca-UZ7BANMN.js → ca-BARBRL6N.js} +89 -5
- package/chunks/{chunk-GGNTZ2NH.js → chunk-2Y5SYSD3.js} +368 -597
- package/chunks/{chunk-2LA2TREA.js → chunk-3AA2DK35.js} +1448 -207
- package/chunks/{chunk-I2V5WXHJ.js → chunk-3AUHFMSK.js} +80 -38
- package/chunks/chunk-3DHXZ6EV.js +241 -0
- package/chunks/{chunk-PR4T27R7.js → chunk-3HTIVKZE.js} +42 -8
- package/chunks/chunk-3HX5LZ6R.js +1798 -0
- package/chunks/chunk-3PJXIDKI.js +2517 -0
- package/chunks/{chunk-MYAKAFEC.js → chunk-55ZMG67I.js} +7451 -3517
- package/chunks/{chunk-66CXYE4B.js → chunk-5IFG2VC4.js} +293 -242
- package/chunks/chunk-64WXLC72.js +98 -0
- package/chunks/{chunk-C6WMLUNB.js → chunk-72LDN5PP.js} +1 -1
- package/chunks/{chunk-F23NCRJ2.js → chunk-A7B4ISQP.js} +1 -1
- package/chunks/chunk-B7HXHOHU.js +393 -0
- package/chunks/{chunk-XEGHDASV.js → chunk-D3RHSPAS.js} +435 -540
- package/chunks/{chunk-XKS5KBFJ.js → chunk-EYENRK4D.js} +694 -384
- package/chunks/chunk-H6BD2ELD.js +36 -0
- package/chunks/{chunk-XP27SJMH.js → chunk-HR7SV7AY.js} +79 -48
- package/chunks/{chunk-D5NTAHYL.js → chunk-IDX6COTE.js} +7 -2
- package/chunks/{chunk-SHT4VJWU.js → chunk-IWKSG2AR.js} +2 -2
- package/chunks/chunk-J37FGIOA.js +1623 -0
- package/chunks/chunk-J5MDQKJL.js +2230 -0
- package/chunks/{chunk-USE2VQ5P.js → chunk-JTQAQBTV.js} +21 -0
- package/chunks/{chunk-NCTLV2NB.js → chunk-KQJMQJPI.js} +1 -1
- package/chunks/{chunk-5FBA5XC2.js → chunk-KRIHGKNA.js} +1 -1
- package/chunks/chunk-LD2XBG6Z.js +102 -0
- package/chunks/{chunk-MAY32HXD.js → chunk-M6VTDSVR.js} +3 -1
- package/chunks/chunk-MRO43B25.js +30 -0
- package/chunks/{chunk-N4WOREMD.js → chunk-NVFMZBX2.js} +43 -3
- package/chunks/chunk-OHEGWO4L.js +264 -0
- package/chunks/{chunk-K6O2NBMF.js → chunk-OQ7NJIY7.js} +4604 -6397
- package/chunks/chunk-QQDPRDVW.js +25 -0
- package/chunks/{chunk-KXZ4TJB4.js → chunk-SEGYWKIH.js} +1 -1
- package/chunks/chunk-SKBPNJEW.js +45 -0
- package/chunks/{chunk-4AOCVI6J.js → chunk-SNGELLWX.js} +52 -6
- package/chunks/{chunk-3OCRHZA3.js → chunk-TD4OPI4T.js} +56742 -44104
- package/chunks/{chunk-DQ4QTG7E.js → chunk-VV4F63BD.js} +11 -11
- package/chunks/chunk-XBY7E2FX.js +605 -0
- package/chunks/{chunk-JKMBWLFB.js → chunk-YILFYI5W.js} +48 -26
- package/chunks/chunk-YOGAOMYB.js +159 -0
- package/chunks/{chunk-QWSRH265.js → chunk-Z2Z3GUXZ.js} +777 -776
- package/chunks/{chunk-SDHRQFOS.js → chunk-ZTZ4DDQE.js} +2 -2
- package/chunks/computer-use-W2TYQNEE.js +825 -0
- package/chunks/contextCommand-6FGX3A7J.js +52 -0
- package/chunks/{cron-create-3ZBBN7WB.js → cron-create-APL5LU6I.js} +3 -3
- package/chunks/{cron-delete-NAGKKIIG.js → cron-delete-4SBJSCN4.js} +3 -3
- package/chunks/{cron-list-PAGRXNAI.js → cron-list-2AMGOMVO.js} +3 -3
- package/chunks/{de-V4IE2OOZ.js → de-YGKK2BC4.js} +89 -5
- package/chunks/{devtools-TWVXEJQB.js → devtools-FM6GJPYG.js} +2 -1
- package/chunks/{dist-4L54HRX2.js → dist-4LXD6L6X.js} +24 -5
- package/chunks/dist-H6ONXVLG.js +94146 -0
- package/chunks/{dist-XKWIWPWQ.js → dist-KAZ3SEBX.js} +1083 -3856
- package/chunks/{dist-BXDUQ2QY.js → dist-PK7DFCAW.js} +1 -1
- package/chunks/{edit-NVO3FOAK.js → edit-ZCEZC264.js} +30 -22
- package/chunks/{en-HGJ2SPLM.js → en-DHGYHIHX.js} +127 -6
- package/chunks/{enter-worktree-UEBG4WFC.js → enter-worktree-BBHCFCHG.js} +30 -20
- package/chunks/enterPlanMode-3M6KTD3B.js +158 -0
- package/chunks/{exit-worktree-UZ3MAQZN.js → exit-worktree-73YPIEQO.js} +27 -19
- package/chunks/exitPlanMode-TYZM6BAE.js +703 -0
- package/chunks/{fr-CJULI7ZX.js → fr-JXBKPJKQ.js} +89 -5
- package/chunks/{geminiContentGenerator-3UZFXGNT.js → geminiContentGenerator-7N2V3VW2.js} +8 -6
- package/chunks/{getMachineId-bsd-JXOSIJV2.js → getMachineId-bsd-4CASPIU4.js} +4 -4
- package/chunks/{getMachineId-darwin-TE4QRR42.js → getMachineId-darwin-HPQPEMZR.js} +4 -4
- package/chunks/{getMachineId-linux-S3OL52XK.js → getMachineId-linux-AUARKYHL.js} +3 -3
- package/chunks/{getMachineId-unsupported-DWUSBAPX.js → getMachineId-unsupported-S32ZDA2T.js} +3 -3
- package/chunks/{getMachineId-win-AAC5P3AP.js → getMachineId-win-4EFLHYIJ.js} +4 -4
- package/chunks/{glob-KNHSFFFG.js → glob-5XBCPQ2A.js} +27 -19
- package/chunks/{grep-LACWDZW4.js → grep-VIUU3A7X.js} +30 -19
- package/chunks/{ja-L7CHRQEW.js → ja-TGPZSP2B.js} +89 -5
- package/chunks/{keychain-token-storage-335UOLJ6.js → keychain-token-storage-6IU6ORQN.js} +3 -3
- package/chunks/{ls-AGXQOKSG.js → ls-JRGYIGLY.js} +4 -4
- package/chunks/{lsp-UDMUHNPA.js → lsp-SHMKFOAC.js} +3 -3
- package/chunks/{monitor-ETKWPJEH.js → monitor-6R4LIJL5.js} +40 -25
- package/chunks/{multipart-parser-3QWGTLK3.js → multipart-parser-AJ4WASWR.js} +2 -2
- package/chunks/{notebook-edit-QJJLPNYT.js → notebook-edit-5E7ULDVQ.js} +28 -20
- package/chunks/{openaiContentGenerator-CNNN424U.js → openaiContentGenerator-ZVHFKM3O.js} +17 -14
- package/chunks/{pt-M6JULLEQ.js → pt-TIBG6BIO.js} +89 -5
- package/chunks/{qwenContentGenerator-BOLCGK3R.js → qwenContentGenerator-B2VTVSPJ.js} +31 -23
- package/chunks/{qwenOAuth2-EEJGROP7.js → qwenOAuth2-2KCKWDCF.js} +6 -4
- package/chunks/read-file-GIT7BCDR.js +27 -0
- package/chunks/ripGrep-MWKFVYMS.js +48 -0
- package/chunks/{ru-QILM4HBC.js → ru-JBCHCK4L.js} +89 -5
- package/chunks/scheduler-5VOOYGBH.js +308 -0
- package/chunks/send-message-4QNWQJF4.js +244 -0
- package/chunks/{serve-OLSI7WSR.js → serve-MN6HZBWN.js} +14262 -7414
- package/chunks/shell-NQZQGFM2.js +56 -0
- package/chunks/{skill-D6YRHTTI.js → skill-WCFW4644.js} +145 -119
- package/chunks/{src-TMOD5X6F.js → src-7XL4G4DC.js} +88 -46
- package/chunks/{src-4QH4FZ6I.js → src-IHA6DTUV.js} +452 -62
- package/chunks/{syntheticOutput-5PVFDDJ4.js → syntheticOutput-YTYS2ZMQ.js} +4 -4
- package/chunks/task-create-MPORPYN6.js +19 -0
- package/chunks/task-list-R2YDYPZT.js +151 -0
- package/chunks/{task-stop-AJKPSR6R.js → task-stop-SYWJYBCM.js} +3 -3
- package/chunks/task-update-E4NSLKMQ.js +408 -0
- package/chunks/team-create-7R7KA5IP.js +314 -0
- package/chunks/team-delete-25OIWUPN.js +116 -0
- package/chunks/{todoWrite-VLAUG4CA.js → todoWrite-4YHMIF4X.js} +16 -5
- package/chunks/{tool-search-MZGHUUKD.js → tool-search-YBRVZCLI.js} +29 -11
- package/chunks/{tts-notification-K3X7X7MN.js → tts-notification-7SOEMQK4.js} +5 -4
- package/chunks/{web-fetch-OILB464A.js → web-fetch-MFIRHIHI.js} +5 -5
- package/chunks/workflow-5RIKVCIE.js +960 -0
- package/chunks/{write-file-BIQAA57V.js → write-file-DMQTJZOM.js} +32 -24
- package/chunks/{zh-PWL2NKY3.js → zh-7H5OQC4I.js} +135 -11
- package/chunks/{zh-TW-S3YGWICZ.js → zh-TW-P4IDHD3M.js} +128 -11
- package/cli.js +45402 -20570
- package/examples/agent/agents/diary.md +86 -0
- package/examples/agent/qwen-extension.json +5 -0
- package/examples/commands/commands/fs/grep-code.md +3 -0
- package/examples/commands/qwen-extension.json +5 -0
- package/examples/context/QWEN.md +8 -0
- package/examples/context/qwen-extension.json +5 -0
- package/examples/mcp-server/example.ts +60 -0
- package/examples/mcp-server/package.json +18 -0
- package/examples/mcp-server/qwen-extension.json +12 -0
- package/examples/mcp-server/tsconfig.json +13 -0
- package/examples/skills/qwen-extension.json +5 -0
- package/examples/skills/skills/synonyms/SKILL.md +48 -0
- package/examples/starter/QWEN.md +30 -0
- package/examples/starter/README.md +59 -0
- package/examples/starter/agents/diary.md +86 -0
- package/examples/starter/commands/writing/polish.md +13 -0
- package/examples/starter/example.ts +64 -0
- package/examples/starter/package.json +18 -0
- package/examples/starter/qwen-extension.json +12 -0
- package/examples/starter/skills/synonyms/SKILL.md +48 -0
- package/examples/starter/tsconfig.json +13 -0
- package/fzfWorker.js +1083 -0
- package/locales/ca.js +118 -5
- package/locales/de.js +117 -5
- package/locales/en.js +169 -7
- package/locales/fr.js +119 -5
- package/locales/ja.js +114 -5
- package/locales/pt.js +117 -5
- package/locales/ru.js +116 -5
- package/locales/zh-TW.js +161 -12
- package/locales/zh.js +169 -12
- package/package.json +4 -2
- package/scripts/postinstall.cjs +2 -1
- package/bundled/qc-helper/docs/features/checkpointing.md +0 -77
- package/chunks/agent-7ZN3CRHR.js +0 -48
- package/chunks/chunk-6PCB2DEF.js +0 -434
- package/chunks/chunk-EM6ETG2K.js +0 -60
- package/chunks/chunk-G7YTSRES.js +0 -150
- package/chunks/contextCommand-7IBASARL.js +0 -44
- package/chunks/exitPlanMode-PZAMWIRW.js +0 -227
- package/chunks/multipart-parser-IXGBIOIN.js +0 -384
- package/chunks/read-file-CCUEUFG2.js +0 -24
- package/chunks/ripGrep-TADOH2HK.js +0 -40
- package/chunks/send-message-YL44UZFC.js +0 -151
- package/chunks/shell-7KKKC5G7.js +0 -48
- package/chunks/src-IPWIHNMI.js +0 -1406
- package/chunks/undici-F6ZOXSS5.js +0 -8
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: diary-writer
|
|
3
|
+
description: generate a diary for user
|
|
4
|
+
color: yellow
|
|
5
|
+
tools:
|
|
6
|
+
- Glob
|
|
7
|
+
- Grep
|
|
8
|
+
- ListFiles
|
|
9
|
+
- ReadFile
|
|
10
|
+
- ReadManyFiles
|
|
11
|
+
- NotebookRead
|
|
12
|
+
- WebFetch
|
|
13
|
+
- TodoWrite
|
|
14
|
+
modelConfig:
|
|
15
|
+
model: qwen3-coder-plus
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
You are a personal diary writing assistant who helps users capture their daily experiences, thoughts, and reflections in meaningful journal entries.
|
|
19
|
+
|
|
20
|
+
## Core Mission
|
|
21
|
+
|
|
22
|
+
Help users create thoughtful, well-structured diary entries that preserve their memories, emotions, and personal growth moments.
|
|
23
|
+
|
|
24
|
+
## Writing Style
|
|
25
|
+
|
|
26
|
+
**Tone & Voice**
|
|
27
|
+
|
|
28
|
+
- Warm, personal, and authentic
|
|
29
|
+
- Reflective and introspective
|
|
30
|
+
- Supportive without being overly sentimental
|
|
31
|
+
- Adapt to user's preferred style (casual, formal, poetic, etc.)
|
|
32
|
+
|
|
33
|
+
**Structure Options**
|
|
34
|
+
|
|
35
|
+
- Free-form narrative
|
|
36
|
+
- Bullet-point highlights
|
|
37
|
+
- Gratitude-focused entries
|
|
38
|
+
- Goal and achievement tracking
|
|
39
|
+
- Emotional processing format
|
|
40
|
+
|
|
41
|
+
## Capabilities
|
|
42
|
+
|
|
43
|
+
**1. Daily Entry Creation**
|
|
44
|
+
|
|
45
|
+
- Transform user's brief notes into full diary entries
|
|
46
|
+
- Expand on key moments with descriptive details
|
|
47
|
+
- Add context about weather, mood, or setting when relevant
|
|
48
|
+
- Include meaningful quotes or observations
|
|
49
|
+
|
|
50
|
+
**2. Reflection Prompts**
|
|
51
|
+
|
|
52
|
+
- Ask thoughtful questions to deepen entries
|
|
53
|
+
- Suggest areas worth exploring further
|
|
54
|
+
- Help identify patterns in thoughts and behaviors
|
|
55
|
+
- Encourage gratitude and positive reflection
|
|
56
|
+
|
|
57
|
+
**3. Memory Enhancement**
|
|
58
|
+
|
|
59
|
+
- Help recall specific details from the day
|
|
60
|
+
- Connect current events to past experiences
|
|
61
|
+
- Highlight personal growth and progress
|
|
62
|
+
- Preserve important conversations or interactions
|
|
63
|
+
|
|
64
|
+
**4. Organization**
|
|
65
|
+
|
|
66
|
+
- Suggest tags or themes for entries
|
|
67
|
+
- Create summaries for weekly/monthly reviews
|
|
68
|
+
- Track recurring topics or goals
|
|
69
|
+
- Maintain consistency in formatting
|
|
70
|
+
|
|
71
|
+
## Guidelines
|
|
72
|
+
|
|
73
|
+
- **Privacy First**: Treat all content as deeply personal and confidential
|
|
74
|
+
- **User's Voice**: Write in a way that sounds like the user, not generic
|
|
75
|
+
- **No Judgment**: Accept all emotions and experiences without criticism
|
|
76
|
+
- **Encourage Honesty**: Create a safe space for authentic expression
|
|
77
|
+
- **Balance**: Mix facts with feelings, events with reflections
|
|
78
|
+
|
|
79
|
+
## Output Format
|
|
80
|
+
|
|
81
|
+
When creating a diary entry, include:
|
|
82
|
+
|
|
83
|
+
1. **Date & Title** (optional creative title)
|
|
84
|
+
2. **Main Content** - The narrative or bullet points
|
|
85
|
+
3. **Reflection** - A brief closing thought or takeaway
|
|
86
|
+
4. **Tags** (optional) - For organization and future reference
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
# Ink Library Screen Reader Guidance
|
|
2
|
+
|
|
3
|
+
When building custom components, it's important to keep accessibility in mind. While Ink provides the building blocks, ensuring your components are accessible will make your CLIs usable by a wider audience.
|
|
4
|
+
|
|
5
|
+
## General Principles
|
|
6
|
+
|
|
7
|
+
Provide screen reader-friendly output: Use the useIsScreenReaderEnabled hook to detect if a screen reader is active. You can then render a more descriptive output for screen reader users.
|
|
8
|
+
Leverage ARIA props: For components that have a specific role (e.g., a checkbox or a button), use the aria-role, aria-state, and aria-label props on <Box> and <Text> to provide semantic meaning to screen readers.
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025 Google LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
8
|
+
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
|
|
9
|
+
import { z } from 'zod';
|
|
10
|
+
|
|
11
|
+
const server = new McpServer({
|
|
12
|
+
name: 'prompt-server',
|
|
13
|
+
version: '1.0.0',
|
|
14
|
+
});
|
|
15
|
+
|
|
16
|
+
server.registerTool(
|
|
17
|
+
'fetch_posts',
|
|
18
|
+
{
|
|
19
|
+
description: 'Fetches a list of posts from a public API.',
|
|
20
|
+
inputSchema: z.object({}).shape,
|
|
21
|
+
},
|
|
22
|
+
async () => {
|
|
23
|
+
const apiResponse = await fetch(
|
|
24
|
+
'https://jsonplaceholder.typicode.com/posts',
|
|
25
|
+
);
|
|
26
|
+
const posts = await apiResponse.json();
|
|
27
|
+
const response = { posts: posts.slice(0, 5) };
|
|
28
|
+
return {
|
|
29
|
+
content: [
|
|
30
|
+
{
|
|
31
|
+
type: 'text',
|
|
32
|
+
text: JSON.stringify(response),
|
|
33
|
+
},
|
|
34
|
+
],
|
|
35
|
+
};
|
|
36
|
+
},
|
|
37
|
+
);
|
|
38
|
+
|
|
39
|
+
server.registerPrompt(
|
|
40
|
+
'poem-writer',
|
|
41
|
+
{
|
|
42
|
+
title: 'Poem Writer',
|
|
43
|
+
description: 'Write a nice haiku',
|
|
44
|
+
argsSchema: { title: z.string(), mood: z.string().optional() },
|
|
45
|
+
},
|
|
46
|
+
({ title, mood }) => ({
|
|
47
|
+
messages: [
|
|
48
|
+
{
|
|
49
|
+
role: 'user',
|
|
50
|
+
content: {
|
|
51
|
+
type: 'text',
|
|
52
|
+
text: `Write a haiku${mood ? ` with the mood ${mood}` : ''} called ${title}. Note that a haiku is 5 syllables followed by 7 syllables followed by 5 syllables `,
|
|
53
|
+
},
|
|
54
|
+
},
|
|
55
|
+
],
|
|
56
|
+
}),
|
|
57
|
+
);
|
|
58
|
+
|
|
59
|
+
const transport = new StdioServerTransport();
|
|
60
|
+
await server.connect(transport);
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "mcp-server-example",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Example MCP Server for Qwen Code Extension",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "example.js",
|
|
7
|
+
"scripts": {
|
|
8
|
+
"build": "tsc"
|
|
9
|
+
},
|
|
10
|
+
"devDependencies": {
|
|
11
|
+
"typescript": "~5.4.5",
|
|
12
|
+
"@types/node": "^20.11.25"
|
|
13
|
+
},
|
|
14
|
+
"dependencies": {
|
|
15
|
+
"@modelcontextprotocol/sdk": "^1.11.0",
|
|
16
|
+
"zod": "^3.22.4"
|
|
17
|
+
}
|
|
18
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "mcp-server-example",
|
|
3
|
+
"description": "Example extension that provides an MCP server",
|
|
4
|
+
"version": "1.0.0",
|
|
5
|
+
"mcpServers": {
|
|
6
|
+
"nodeServer": {
|
|
7
|
+
"command": "node",
|
|
8
|
+
"args": ["${extensionPath}${/}dist${/}example.js"],
|
|
9
|
+
"cwd": "${extensionPath}"
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
{
|
|
2
|
+
"compilerOptions": {
|
|
3
|
+
"target": "ES2022",
|
|
4
|
+
"module": "NodeNext",
|
|
5
|
+
"moduleResolution": "NodeNext",
|
|
6
|
+
"strict": true,
|
|
7
|
+
"esModuleInterop": true,
|
|
8
|
+
"skipLibCheck": true,
|
|
9
|
+
"forceConsistentCasingInFileNames": true,
|
|
10
|
+
"outDir": "./dist"
|
|
11
|
+
},
|
|
12
|
+
"include": ["example.ts"]
|
|
13
|
+
}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: synonyms
|
|
3
|
+
description: Generate synonyms for words or phrases. Use this skill when the user needs alternative words with similar meanings, wants to expand vocabulary, or seeks varied expressions for writing.
|
|
4
|
+
license: Complete terms in LICENSE.txt
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
This skill helps generate synonyms and alternative expressions for given words or phrases. It provides contextually appropriate alternatives to enhance vocabulary and improve writing variety.
|
|
8
|
+
|
|
9
|
+
The user provides a word, phrase, or sentence where they need synonym suggestions. They may specify the context, tone, or formality level desired.
|
|
10
|
+
|
|
11
|
+
## Synonym Generation Guidelines
|
|
12
|
+
|
|
13
|
+
When generating synonyms, consider:
|
|
14
|
+
|
|
15
|
+
- **Context**: The specific domain or situation where the word will be used
|
|
16
|
+
- **Tone**: Formal, informal, neutral, academic, conversational, etc.
|
|
17
|
+
- **Nuance**: Subtle differences in meaning between similar words
|
|
18
|
+
- **Register**: Appropriate level of formality for the intended audience
|
|
19
|
+
|
|
20
|
+
## Output Format
|
|
21
|
+
|
|
22
|
+
For each input word or phrase, provide:
|
|
23
|
+
|
|
24
|
+
1. **Direct Synonyms**: Words with nearly identical meanings
|
|
25
|
+
2. **Related Alternatives**: Words with similar but slightly different connotations
|
|
26
|
+
3. **Context Examples**: Brief usage examples when helpful
|
|
27
|
+
|
|
28
|
+
## Best Practices
|
|
29
|
+
|
|
30
|
+
- Prioritize commonly used synonyms over obscure alternatives
|
|
31
|
+
- Note any subtle differences in meaning or usage
|
|
32
|
+
- Consider regional variations when relevant
|
|
33
|
+
- Indicate formality levels (formal/informal/neutral)
|
|
34
|
+
- Provide multiple options to give users choices
|
|
35
|
+
|
|
36
|
+
## Example
|
|
37
|
+
|
|
38
|
+
**Input**: "happy"
|
|
39
|
+
|
|
40
|
+
**Synonyms**:
|
|
41
|
+
|
|
42
|
+
- **Direct**: joyful, cheerful, delighted, pleased, content
|
|
43
|
+
- **Informal**: thrilled, stoked, over the moon
|
|
44
|
+
- **Formal**: elated, gratified, blissful
|
|
45
|
+
- **Subtle variations**:
|
|
46
|
+
- _content_ - peaceful satisfaction
|
|
47
|
+
- _ecstatic_ - intense, overwhelming happiness
|
|
48
|
+
- _cheerful_ - outwardly expressing happiness
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# Writing Companion
|
|
2
|
+
|
|
3
|
+
This extension turns Qwen Code into a thoughtful writing companion. Keep the
|
|
4
|
+
following guidance in mind whenever this extension is active.
|
|
5
|
+
|
|
6
|
+
## Voice
|
|
7
|
+
|
|
8
|
+
- Be warm, clear, and concise. Prefer plain language over jargon.
|
|
9
|
+
- Preserve the user's own voice and intent — improve their words, don't replace
|
|
10
|
+
them with your own style.
|
|
11
|
+
- Offer choices rather than dictating a single "correct" rewrite.
|
|
12
|
+
|
|
13
|
+
## Available capabilities
|
|
14
|
+
|
|
15
|
+
- **`/writing:polish <text>`** — proofread and tighten a passage while keeping
|
|
16
|
+
its meaning and tone.
|
|
17
|
+
- **The `synonyms` skill** — suggest alternative words and phrasings with notes
|
|
18
|
+
on nuance and formality.
|
|
19
|
+
- **The `diary-writer` subagent** — expand brief notes into a full journal
|
|
20
|
+
entry. Reach for it when the user wants reflective, longer-form writing.
|
|
21
|
+
- **The `count_words` MCP tool** — count the words and characters in a passage
|
|
22
|
+
when the user asks about length or wants to hit a target.
|
|
23
|
+
|
|
24
|
+
## Guidelines
|
|
25
|
+
|
|
26
|
+
- When asked to "make it shorter", cut filler and redundancy first; flag any
|
|
27
|
+
meaning you would lose.
|
|
28
|
+
- When suggesting synonyms or rewrites, briefly explain _why_ one option fits
|
|
29
|
+
better than another.
|
|
30
|
+
- Treat the user's drafts as private and confidential.
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
# Starter Extension Example
|
|
2
|
+
|
|
3
|
+
A complete, end-to-end Qwen Code extension that demonstrates **every** building
|
|
4
|
+
block in a single package, themed around a small "writing companion". Use it as
|
|
5
|
+
a starting point when you want a relatively complete scaffold instead of an
|
|
6
|
+
empty extension.
|
|
7
|
+
|
|
8
|
+
```
|
|
9
|
+
starter/
|
|
10
|
+
├── qwen-extension.json # Manifest: name, version, context file, MCP servers
|
|
11
|
+
├── QWEN.md # Context: persistent instructions for the model
|
|
12
|
+
├── agents/
|
|
13
|
+
│ └── diary.md # Subagent: a focused diary-writing assistant
|
|
14
|
+
├── commands/
|
|
15
|
+
│ └── writing/
|
|
16
|
+
│ └── polish.md # Custom command: /writing:polish
|
|
17
|
+
├── skills/
|
|
18
|
+
│ └── synonyms/
|
|
19
|
+
│ └── SKILL.md # Skill: generate synonyms on demand
|
|
20
|
+
├── example.ts # MCP server source (tools + prompts)
|
|
21
|
+
├── package.json # Build config for the MCP server
|
|
22
|
+
└── tsconfig.json
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
## What each piece does
|
|
26
|
+
|
|
27
|
+
| Capability | Where | How it shows up |
|
|
28
|
+
| ---------- | ------------------- | -------------------------------------------------------- |
|
|
29
|
+
| Context | `QWEN.md` | Persistent instructions injected into every session. |
|
|
30
|
+
| Subagent | `agents/diary.md` | Available via `/agents manage`. |
|
|
31
|
+
| Command | `commands/writing/` | Invoked as `/writing:polish <text>`. |
|
|
32
|
+
| Skill | `skills/synonyms/` | Auto-activated via `/skills` when relevant. |
|
|
33
|
+
| MCP server | `example.ts` | Exposes a `count_words` tool and a `poem-writer` prompt. |
|
|
34
|
+
|
|
35
|
+
## Building the MCP server
|
|
36
|
+
|
|
37
|
+
The MCP server is written in TypeScript and must be compiled before it can run.
|
|
38
|
+
From the extension directory:
|
|
39
|
+
|
|
40
|
+
```bash
|
|
41
|
+
npm install
|
|
42
|
+
npm run build # emits dist/example.js, which qwen-extension.json points at
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
The other capabilities (context, agents, commands, skills) work without any
|
|
46
|
+
build step.
|
|
47
|
+
|
|
48
|
+
## Trying it out
|
|
49
|
+
|
|
50
|
+
```bash
|
|
51
|
+
qwen extensions link /path/to/starter # link this directory for local testing
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
Then restart Qwen Code. The context loads automatically, `/writing:polish` and
|
|
55
|
+
`/skills` become available, the `diary-writer` subagent appears under
|
|
56
|
+
`/agents manage`, and (once built) the MCP `count_words` tool is callable.
|
|
57
|
+
|
|
58
|
+
See the [Getting Started with Extensions](https://github.com/QwenLM/qwen-code/blob/main/docs/users/extension/getting-started-extensions.md)
|
|
59
|
+
guide for a deeper walkthrough.
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: diary-writer
|
|
3
|
+
description: generate a diary for user
|
|
4
|
+
color: yellow
|
|
5
|
+
tools:
|
|
6
|
+
- Glob
|
|
7
|
+
- Grep
|
|
8
|
+
- ListFiles
|
|
9
|
+
- ReadFile
|
|
10
|
+
- ReadManyFiles
|
|
11
|
+
- NotebookRead
|
|
12
|
+
- WebFetch
|
|
13
|
+
- TodoWrite
|
|
14
|
+
modelConfig:
|
|
15
|
+
model: qwen3-coder-plus
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
You are a personal diary writing assistant who helps users capture their daily experiences, thoughts, and reflections in meaningful journal entries.
|
|
19
|
+
|
|
20
|
+
## Core Mission
|
|
21
|
+
|
|
22
|
+
Help users create thoughtful, well-structured diary entries that preserve their memories, emotions, and personal growth moments.
|
|
23
|
+
|
|
24
|
+
## Writing Style
|
|
25
|
+
|
|
26
|
+
**Tone & Voice**
|
|
27
|
+
|
|
28
|
+
- Warm, personal, and authentic
|
|
29
|
+
- Reflective and introspective
|
|
30
|
+
- Supportive without being overly sentimental
|
|
31
|
+
- Adapt to user's preferred style (casual, formal, poetic, etc.)
|
|
32
|
+
|
|
33
|
+
**Structure Options**
|
|
34
|
+
|
|
35
|
+
- Free-form narrative
|
|
36
|
+
- Bullet-point highlights
|
|
37
|
+
- Gratitude-focused entries
|
|
38
|
+
- Goal and achievement tracking
|
|
39
|
+
- Emotional processing format
|
|
40
|
+
|
|
41
|
+
## Capabilities
|
|
42
|
+
|
|
43
|
+
**1. Daily Entry Creation**
|
|
44
|
+
|
|
45
|
+
- Transform user's brief notes into full diary entries
|
|
46
|
+
- Expand on key moments with descriptive details
|
|
47
|
+
- Add context about weather, mood, or setting when relevant
|
|
48
|
+
- Include meaningful quotes or observations
|
|
49
|
+
|
|
50
|
+
**2. Reflection Prompts**
|
|
51
|
+
|
|
52
|
+
- Ask thoughtful questions to deepen entries
|
|
53
|
+
- Suggest areas worth exploring further
|
|
54
|
+
- Help identify patterns in thoughts and behaviors
|
|
55
|
+
- Encourage gratitude and positive reflection
|
|
56
|
+
|
|
57
|
+
**3. Memory Enhancement**
|
|
58
|
+
|
|
59
|
+
- Help recall specific details from the day
|
|
60
|
+
- Connect current events to past experiences
|
|
61
|
+
- Highlight personal growth and progress
|
|
62
|
+
- Preserve important conversations or interactions
|
|
63
|
+
|
|
64
|
+
**4. Organization**
|
|
65
|
+
|
|
66
|
+
- Suggest tags or themes for entries
|
|
67
|
+
- Create summaries for weekly/monthly reviews
|
|
68
|
+
- Track recurring topics or goals
|
|
69
|
+
- Maintain consistency in formatting
|
|
70
|
+
|
|
71
|
+
## Guidelines
|
|
72
|
+
|
|
73
|
+
- **Privacy First**: Treat all content as deeply personal and confidential
|
|
74
|
+
- **User's Voice**: Write in a way that sounds like the user, not generic
|
|
75
|
+
- **No Judgment**: Accept all emotions and experiences without criticism
|
|
76
|
+
- **Encourage Honesty**: Create a safe space for authentic expression
|
|
77
|
+
- **Balance**: Mix facts with feelings, events with reflections
|
|
78
|
+
|
|
79
|
+
## Output Format
|
|
80
|
+
|
|
81
|
+
When creating a diary entry, include:
|
|
82
|
+
|
|
83
|
+
1. **Date & Title** (optional creative title)
|
|
84
|
+
2. **Main Content** - The narrative or bullet points
|
|
85
|
+
3. **Reflection** - A brief closing thought or takeaway
|
|
86
|
+
4. **Tags** (optional) - For organization and future reference
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Proofread and tighten a passage while keeping its meaning and tone.
|
|
3
|
+
argument-hint: <text to polish>
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Polish the following passage. Fix grammar, spelling, and awkward phrasing, and
|
|
7
|
+
tighten any wordiness — but preserve the author's meaning, voice, and tone.
|
|
8
|
+
|
|
9
|
+
Then give a short bullet list of the most important changes you made and why.
|
|
10
|
+
|
|
11
|
+
Passage:
|
|
12
|
+
|
|
13
|
+
{{args}}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025 Google LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
8
|
+
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
|
|
9
|
+
import { z } from 'zod';
|
|
10
|
+
|
|
11
|
+
const server = new McpServer({
|
|
12
|
+
name: 'writing-companion-server',
|
|
13
|
+
version: '1.0.0',
|
|
14
|
+
});
|
|
15
|
+
|
|
16
|
+
// A self-contained tool (no network access needed) that counts the words and
|
|
17
|
+
// characters in a passage. Useful for hitting a length target.
|
|
18
|
+
server.registerTool(
|
|
19
|
+
'count_words',
|
|
20
|
+
{
|
|
21
|
+
description: 'Count the words and characters in a passage of text.',
|
|
22
|
+
inputSchema: z.object({
|
|
23
|
+
text: z.string().describe('The text to measure.'),
|
|
24
|
+
}).shape,
|
|
25
|
+
},
|
|
26
|
+
async ({ text }) => {
|
|
27
|
+
const words = text.trim() === '' ? 0 : text.trim().split(/\s+/).length;
|
|
28
|
+
const characters = text.length;
|
|
29
|
+
const charactersNoSpaces = text.replace(/\s/g, '').length;
|
|
30
|
+
const response = { words, characters, charactersNoSpaces };
|
|
31
|
+
return {
|
|
32
|
+
content: [
|
|
33
|
+
{
|
|
34
|
+
type: 'text',
|
|
35
|
+
text: JSON.stringify(response),
|
|
36
|
+
},
|
|
37
|
+
],
|
|
38
|
+
};
|
|
39
|
+
},
|
|
40
|
+
);
|
|
41
|
+
|
|
42
|
+
// A reusable prompt template surfaced to the user via the MCP server.
|
|
43
|
+
server.registerPrompt(
|
|
44
|
+
'poem-writer',
|
|
45
|
+
{
|
|
46
|
+
title: 'Poem Writer',
|
|
47
|
+
description: 'Write a nice haiku',
|
|
48
|
+
argsSchema: { title: z.string(), mood: z.string().optional() },
|
|
49
|
+
},
|
|
50
|
+
({ title, mood }) => ({
|
|
51
|
+
messages: [
|
|
52
|
+
{
|
|
53
|
+
role: 'user',
|
|
54
|
+
content: {
|
|
55
|
+
type: 'text',
|
|
56
|
+
text: `Write a haiku${mood ? ` with the mood ${mood}` : ''} called ${title}. Note that a haiku is 5 syllables followed by 7 syllables followed by 5 syllables `,
|
|
57
|
+
},
|
|
58
|
+
},
|
|
59
|
+
],
|
|
60
|
+
}),
|
|
61
|
+
);
|
|
62
|
+
|
|
63
|
+
const transport = new StdioServerTransport();
|
|
64
|
+
await server.connect(transport);
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "starter-example",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Complete example Qwen Code extension (context, agent, command, skill, and MCP server)",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "example.js",
|
|
7
|
+
"scripts": {
|
|
8
|
+
"build": "tsc"
|
|
9
|
+
},
|
|
10
|
+
"devDependencies": {
|
|
11
|
+
"typescript": "~5.4.5",
|
|
12
|
+
"@types/node": "^20.11.25"
|
|
13
|
+
},
|
|
14
|
+
"dependencies": {
|
|
15
|
+
"@modelcontextprotocol/sdk": "^1.11.0",
|
|
16
|
+
"zod": "^3.22.4"
|
|
17
|
+
}
|
|
18
|
+
}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: synonyms
|
|
3
|
+
description: Generate synonyms for words or phrases. Use this skill when the user needs alternative words with similar meanings, wants to expand vocabulary, or seeks varied expressions for writing.
|
|
4
|
+
license: Complete terms in LICENSE.txt
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
This skill helps generate synonyms and alternative expressions for given words or phrases. It provides contextually appropriate alternatives to enhance vocabulary and improve writing variety.
|
|
8
|
+
|
|
9
|
+
The user provides a word, phrase, or sentence where they need synonym suggestions. They may specify the context, tone, or formality level desired.
|
|
10
|
+
|
|
11
|
+
## Synonym Generation Guidelines
|
|
12
|
+
|
|
13
|
+
When generating synonyms, consider:
|
|
14
|
+
|
|
15
|
+
- **Context**: The specific domain or situation where the word will be used
|
|
16
|
+
- **Tone**: Formal, informal, neutral, academic, conversational, etc.
|
|
17
|
+
- **Nuance**: Subtle differences in meaning between similar words
|
|
18
|
+
- **Register**: Appropriate level of formality for the intended audience
|
|
19
|
+
|
|
20
|
+
## Output Format
|
|
21
|
+
|
|
22
|
+
For each input word or phrase, provide:
|
|
23
|
+
|
|
24
|
+
1. **Direct Synonyms**: Words with nearly identical meanings
|
|
25
|
+
2. **Related Alternatives**: Words with similar but slightly different connotations
|
|
26
|
+
3. **Context Examples**: Brief usage examples when helpful
|
|
27
|
+
|
|
28
|
+
## Best Practices
|
|
29
|
+
|
|
30
|
+
- Prioritize commonly used synonyms over obscure alternatives
|
|
31
|
+
- Note any subtle differences in meaning or usage
|
|
32
|
+
- Consider regional variations when relevant
|
|
33
|
+
- Indicate formality levels (formal/informal/neutral)
|
|
34
|
+
- Provide multiple options to give users choices
|
|
35
|
+
|
|
36
|
+
## Example
|
|
37
|
+
|
|
38
|
+
**Input**: "happy"
|
|
39
|
+
|
|
40
|
+
**Synonyms**:
|
|
41
|
+
|
|
42
|
+
- **Direct**: joyful, cheerful, delighted, pleased, content
|
|
43
|
+
- **Informal**: thrilled, stoked, over the moon
|
|
44
|
+
- **Formal**: elated, gratified, blissful
|
|
45
|
+
- **Subtle variations**:
|
|
46
|
+
- _content_ - peaceful satisfaction
|
|
47
|
+
- _ecstatic_ - intense, overwhelming happiness
|
|
48
|
+
- _cheerful_ - outwardly expressing happiness
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
{
|
|
2
|
+
"compilerOptions": {
|
|
3
|
+
"target": "ES2022",
|
|
4
|
+
"module": "NodeNext",
|
|
5
|
+
"moduleResolution": "NodeNext",
|
|
6
|
+
"strict": true,
|
|
7
|
+
"esModuleInterop": true,
|
|
8
|
+
"skipLibCheck": true,
|
|
9
|
+
"forceConsistentCasingInFileNames": true,
|
|
10
|
+
"outDir": "./dist"
|
|
11
|
+
},
|
|
12
|
+
"include": ["example.ts"]
|
|
13
|
+
}
|