shakers-cli-beta 0.8.0-beta.5 → 0.10.0
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 +39 -9
- package/bin/ai-usage.js +37 -19
- package/bin/login.js +1 -1
- package/bin/mcp.js +25 -21
- package/bin/mcpb.js +5 -0
- package/package.json +3 -2
- package/src/auth-session-store.js +1 -0
- package/src/authorship.js +7 -6
- package/src/backend-request.js +2 -2
- package/src/certify-dimension-client.js +0 -54
- package/src/certify-dimension-flow.js +20 -81
- package/src/config.js +29 -8
- package/src/cv-file.js +62 -0
- package/src/device-login.js +5 -3
- package/src/find-projects-client.js +16 -6
- package/src/git-activity.js +8 -7
- package/src/git-log-prefetch.js +53 -0
- package/src/i18n.js +33 -58
- package/src/mcp-ai-usage-tool.js +150 -65
- package/src/mcp-auth-form.js +213 -44
- package/src/mcp-certify-dimension-tools.js +2 -2
- package/src/mcp-choice.js +47 -0
- package/src/mcp-install.js +32 -3
- package/src/mcp-instructions.js +27 -0
- package/src/mcp-onboarding-tools.js +3 -3
- package/src/mcp-prompts.js +73 -0
- package/src/mcp-rate-tools.js +2 -2
- package/src/mcp-register-tools.js +89 -313
- package/src/mcp-role-tools.js +177 -16
- package/src/mcp-server.js +108 -4
- package/src/mcp-signup-client.js +118 -0
- package/src/mcp-signup-tools.js +818 -0
- package/src/onboarding-client.js +28 -52
- package/src/onboarding-flow.js +3 -147
- package/src/onboarding-status-client.js +16 -1
- package/src/register-context.js +1 -17
- package/src/roles-client.js +3 -1
- package/src/scanner.js +13 -1
- package/src/session-normalizers.js +174 -0
- package/src/session-scan.js +149 -10
- package/src/signup-client.js +33 -21
- package/src/signup-copy.js +338 -0
- package/src/signup-language.js +21 -0
- package/src/usage-run-steps.js +3 -2
- package/src/work-streams.js +7 -2
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
// MCP prompts = in-client slash-commands. Each is a thin wrapper that injects a user turn
|
|
4
|
+
// telling the assistant which Shakers tool(s) to use — the logic stays in the tools, so
|
|
5
|
+
// there is no duplication. `buildMessages(args)` returns the prompts/get message list.
|
|
6
|
+
|
|
7
|
+
function userText(text) {
|
|
8
|
+
return [{ role: 'user', content: { type: 'text', text } }];
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
// Only reference tools that exist in the FULL server; `available(toolNames)` hides a prompt
|
|
12
|
+
// when its tool isn't registered (e.g. the --local scan-only server).
|
|
13
|
+
const PROMPTS = [
|
|
14
|
+
{
|
|
15
|
+
name: 'ai_usage',
|
|
16
|
+
description: 'Evaluate and showcase how you work with AI (scans this machine, builds your "My work with AI").',
|
|
17
|
+
tools: ['ai_usage'],
|
|
18
|
+
buildMessages: () => userText(
|
|
19
|
+
'Evaluate how I work with AI for my Shakers profile. First ask me for consent and the email to attribute it to, then call the `ai_usage` tool and show me the resulting report verbatim. Never show internal ids/codes.',
|
|
20
|
+
),
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
name: 'onboarding',
|
|
24
|
+
description: 'Sign up on Shakers from this chat: your CV and LinkedIn, a password or Google, and your profile filled in for you.',
|
|
25
|
+
tools: ['signup_start'],
|
|
26
|
+
buildMessages: (_args, lang) => userText(
|
|
27
|
+
`Sign me up on Shakers following the sign-up flow in your Shakers instructions. Start with \`signup_start\` (language: the one I write in; "${lang}" if I have not written anything yet) and show me its texts word for word. Ask me only the questions the tools return, with their options, and nothing you can infer.`,
|
|
28
|
+
),
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
name: 'find_projects',
|
|
32
|
+
description: 'Find open Shakers projects/positions matched to you.',
|
|
33
|
+
tools: ['find_projects'],
|
|
34
|
+
buildMessages: () => userText(
|
|
35
|
+
'Find open Shakers positions that match me: call `find_projects` and summarize them by title/company (never show internal ids). Offer `save_project` / `show_project` for ones I like.',
|
|
36
|
+
),
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
name: 'certify',
|
|
40
|
+
description: 'See which role dimensions you can certify and start a certification.',
|
|
41
|
+
tools: ['list_certifiable_dimensions'],
|
|
42
|
+
buildMessages: () => userText(
|
|
43
|
+
'Help me certify on Shakers: call `list_certifiable_dimensions`, present the dimensions I can certify by name, and guide me through certifying the one I pick.',
|
|
44
|
+
),
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
name: 'ask',
|
|
48
|
+
description: 'Ask Alma, the Shakers AI assistant, a question.',
|
|
49
|
+
tools: ['ask'],
|
|
50
|
+
arguments: [{ name: 'message', description: 'What to ask Alma.', required: false }],
|
|
51
|
+
buildMessages: (args = {}) => userText(
|
|
52
|
+
`Ask Alma (the Shakers assistant) and relay her answer as-is. My question: ${typeof args.message === 'string' && args.message ? args.message : '(ask me what I want to know first)'}`,
|
|
53
|
+
),
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
name: 'my_profile',
|
|
57
|
+
description: 'Show your Shakers profile (role, rate, availability, "My work with AI").',
|
|
58
|
+
tools: ['get_profile'],
|
|
59
|
+
buildMessages: () => userText(
|
|
60
|
+
'Show my Shakers profile: call `get_profile` (and `get_rate` / `get_availability` if useful) and present it in plain terms. Any ids/codes are internal — never show them.',
|
|
61
|
+
),
|
|
62
|
+
},
|
|
63
|
+
];
|
|
64
|
+
|
|
65
|
+
function makePrompts(toolNames = null, lang = 'en') {
|
|
66
|
+
const available = toolNames instanceof Set ? toolNames : null;
|
|
67
|
+
// Keep a prompt only if at least one of its tools is present in this server.
|
|
68
|
+
return PROMPTS
|
|
69
|
+
.filter((p) => !available || p.tools.some((t) => available.has(t)))
|
|
70
|
+
.map((p) => ({ ...p, buildMessages: (args) => p.buildMessages(args, lang) }));
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
module.exports = { makePrompts, PROMPTS };
|
package/src/mcp-rate-tools.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
// MCP: view the talent's
|
|
3
|
+
// MCP: view the talent's rates (hourly and annual, as the web shows them). Read-only.
|
|
4
4
|
|
|
5
5
|
const GET_RATE_SCHEMA = { type: 'object', properties: {} };
|
|
6
6
|
|
|
@@ -29,7 +29,7 @@ function makeRateTools(deps = {}) {
|
|
|
29
29
|
return [
|
|
30
30
|
{
|
|
31
31
|
name: 'get_rate',
|
|
32
|
-
description: "View the talent's
|
|
32
|
+
description: "View the talent's rates as the web shows them: partTimePrice is the hourly rate (per hour) and fullTimePrice the annual target (per year); a variant not selected is not offered. Read-only. Requires an active session. Show only the human-facing amounts/currency; any internal ids in the result are handles for tools only — never show or mention them to the talent.",
|
|
33
33
|
inputSchema: GET_RATE_SCHEMA,
|
|
34
34
|
handler: getRate,
|
|
35
35
|
},
|