owner-clone-ai-mcp 2.1.0 → 2.1.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.
- package/domains/knowledge.js +2 -1
- package/domains/projectOs.js +26 -4
- package/package.json +1 -1
package/domains/knowledge.js
CHANGED
|
@@ -34,6 +34,7 @@ const tools = [
|
|
|
34
34
|
properties: {
|
|
35
35
|
query: { type: 'string', description: '検索クエリ' },
|
|
36
36
|
limit: { type: 'number', description: '取得件数(デフォルト: 10)' },
|
|
37
|
+
scope: { type: 'string', enum: ['account'], description: 'プロジェクト専用キー使用時に "account" を指定するとアカウント全体を検索(既定はプロジェクトの棚に限定)。棚の外の正本ナレッジを探すときに使う' },
|
|
37
38
|
},
|
|
38
39
|
required: ['query'],
|
|
39
40
|
},
|
|
@@ -402,7 +403,7 @@ const handlers = {
|
|
|
402
403
|
async search_knowledge(args) {
|
|
403
404
|
const data = await callApi('/knowledge/search', {
|
|
404
405
|
method: 'POST',
|
|
405
|
-
body: JSON.stringify({ query: args.query, limit: args.limit }),
|
|
406
|
+
body: JSON.stringify({ query: args.query, limit: args.limit, scope: args.scope }),
|
|
406
407
|
});
|
|
407
408
|
if (!data.results || data.results.length === 0) {
|
|
408
409
|
return `「${args.query}」に一致するナレッジは見つかりませんでした。`;
|
package/domains/projectOs.js
CHANGED
|
@@ -68,11 +68,12 @@ kind: note=メモ / decision=決定 / result=経過・実行結果 / customer=
|
|
|
68
68
|
• add_task — { title }
|
|
69
69
|
• add_goal — { title, purpose, done_criteria }
|
|
70
70
|
• create_resource — { resource_type: agent_preset|chatbot|funnel|workflow, config: { name, description } }
|
|
71
|
+
• remove_goal — { goal_id }(承認つきゴール削除。子ゴールは部分木ごと消え、タスクは残って紐付けだけ外れる)
|
|
71
72
|
⚠️ 過去に却下された提案と同じ内容は再提案しないこと(却下理由は日誌にあります)。`,
|
|
72
73
|
annotations: { destructiveHint: false, idempotentHint: true },
|
|
73
74
|
inputSchema: { type: 'object', properties: {
|
|
74
75
|
project_id: { type: 'string', description: 'プロジェクト紐付きキーなら省略可' },
|
|
75
|
-
kind: { type: 'string', enum: ['add_task', 'add_goal', 'create_resource'] },
|
|
76
|
+
kind: { type: 'string', enum: ['add_task', 'add_goal', 'create_resource', 'remove_goal'] },
|
|
76
77
|
payload: { type: 'object' },
|
|
77
78
|
reason: { type: 'string', description: '承認する人が一目で判断できる理由' },
|
|
78
79
|
goal_id: { type: 'string' },
|
|
@@ -87,9 +88,14 @@ kind: note=メモ / decision=決定 / result=経過・実行結果 / customer=
|
|
|
87
88
|
},
|
|
88
89
|
{
|
|
89
90
|
name: 'approve_project_proposal',
|
|
90
|
-
description:
|
|
91
|
+
description: `提案を承認して実行します【書き込み権限付きキーが必要】。⚠️ ユーザーから明示的に「承認して」と言われたときだけ使ってください(自分の提案を自分で承認しない)。
|
|
92
|
+
goal_plan はユーザーが「◯◯は省いて承認」と言った場合、exclude_goal_titles / exclude_task_titles(タイトル完全一致)で部分承認できます。`,
|
|
91
93
|
annotations: { destructiveHint: false, idempotentHint: false },
|
|
92
|
-
inputSchema: { type: 'object', properties: {
|
|
94
|
+
inputSchema: { type: 'object', properties: {
|
|
95
|
+
proposal_id: { type: 'string' },
|
|
96
|
+
exclude_goal_titles: { type: 'array', items: { type: 'string' }, description: '除外するゴールのタイトル(部分木ごと・完全一致)' },
|
|
97
|
+
exclude_task_titles: { type: 'array', items: { type: 'string' }, description: '除外するタスクのタイトル(完全一致)' },
|
|
98
|
+
}, required: ['proposal_id'] },
|
|
93
99
|
},
|
|
94
100
|
{
|
|
95
101
|
name: 'reject_project_proposal',
|
|
@@ -120,6 +126,7 @@ role: reference(参照) / tool(道具) / output(成果物)`,
|
|
|
120
126
|
resource_type: { type: 'string' },
|
|
121
127
|
resource_id: { type: 'string' },
|
|
122
128
|
role: { type: 'string', enum: ['reference', 'tool', 'output'] },
|
|
129
|
+
res_category: { type: 'string', enum: ['persona', 'tone', 'offer', 'evidence', 'material', 'playbook', 'other'], description: '棚カテゴリ(部署の必須要件と突合される。ナレッジは自動推定されるため通常は省略可)' },
|
|
123
130
|
}, required: ['resource_type', 'resource_id'] },
|
|
124
131
|
},
|
|
125
132
|
{
|
|
@@ -132,6 +139,16 @@ role: reference(参照) / tool(道具) / output(成果物)`,
|
|
|
132
139
|
folder_id: { type: 'string', description: 'ナレッジフォルダID(list_knowledge_folders で確認。省略=解除)' },
|
|
133
140
|
} },
|
|
134
141
|
},
|
|
142
|
+
{
|
|
143
|
+
name: 'set_project_brief',
|
|
144
|
+
description: `プロジェクトの事業ブリーフ(ヒアリング回答・前提情報)を更新します【書き込み権限付きキーが必要】。
|
|
145
|
+
キー単位のマージ(渡したキーだけ上書き・値 null でキー削除)。以後の分解(plan_project_goals)と作業指示書(get_goal_briefing)に自動で効きます。`,
|
|
146
|
+
annotations: { destructiveHint: false, idempotentHint: true },
|
|
147
|
+
inputSchema: { type: 'object', properties: {
|
|
148
|
+
project_id: { type: 'string', description: 'プロジェクト紐付きキーなら省略可' },
|
|
149
|
+
brief: { type: 'object', description: '{ ターゲット: "...", 納期: "...", 品質基準: "..." } 形式。1値2000字・全体8KBまで' },
|
|
150
|
+
}, required: ['brief'] },
|
|
151
|
+
},
|
|
135
152
|
{
|
|
136
153
|
name: 'distill_project_knowledge',
|
|
137
154
|
description: '航海日誌から「次も使える学び」をナレッジに整理します(蒸留)【書き込み権限付きキーが必要】。ゴール完了時は自動で走るため、ユーザーに頼まれたときだけ使ってください。',
|
|
@@ -232,7 +249,8 @@ const handlers = {
|
|
|
232
249
|
`- [${p.id}] ${p.status === 'pending' ? '⏸' : p.status} ${p.kind}: ${p.reason || ''}`).join('\n');
|
|
233
250
|
},
|
|
234
251
|
async approve_project_proposal(args) {
|
|
235
|
-
const d = await callApi(`/project-os/proposals/${args.proposal_id}/approve`, { method: 'POST'
|
|
252
|
+
const d = await callApi(`/project-os/proposals/${args.proposal_id}/approve`, { method: 'POST',
|
|
253
|
+
body: JSON.stringify({ exclude_goal_titles: args.exclude_goal_titles || [], exclude_task_titles: args.exclude_task_titles || [] }) });
|
|
236
254
|
return `✅ 実行しました(${d.executed})\n結果: ${JSON.stringify(d.result)}`;
|
|
237
255
|
},
|
|
238
256
|
async reject_project_proposal(args) {
|
|
@@ -253,6 +271,10 @@ const handlers = {
|
|
|
253
271
|
? `✅ 成果物の保存先を設定しました。${d.hint || ''}`
|
|
254
272
|
: '✅ 保存先を解除しました(未分類に保存されます)';
|
|
255
273
|
},
|
|
274
|
+
async set_project_brief(args = {}) {
|
|
275
|
+
const d = await callApi('/project-os/brief', { method: 'POST', body: JSON.stringify(args) });
|
|
276
|
+
return `✅ ブリーフを更新しました。${d.hint || ''}\n現在: ${JSON.stringify(d.brief).slice(0, 400)}`;
|
|
277
|
+
},
|
|
256
278
|
async distill_project_knowledge(args = {}) {
|
|
257
279
|
const d = await callApi('/project-os/distill', { method: 'POST', body: JSON.stringify(args) });
|
|
258
280
|
if (d.skipped) return `⏭ ${d.skipped}`;
|