@selesai/code 0.5.24 → 0.5.26
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/dist/extensions/pi-powerline-footer/fixed-editor/terminal-split.ts +4 -1
- package/dist/extensions/pi-powerline-footer/index.ts +1 -0
- package/dist/extensions/workflow/adapter.ts +2 -2
- package/dist/extensions/workflow/modes/loop.ts +30 -11
- package/docs/workflows.md +3 -3
- package/package.json +2 -2
- package/dist/core/provider-display-names.d.ts +0 -2
- package/dist/core/provider-display-names.d.ts.map +0 -1
- package/dist/core/provider-display-names.js +0 -36
- package/dist/core/provider-display-names.js.map +0 -1
- package/dist/data/capabilities.d.ts +0 -48
- package/dist/data/capabilities.d.ts.map +0 -1
- package/dist/data/capabilities.js +0 -282
- package/dist/data/capabilities.js.map +0 -1
- package/dist/data/navigation.d.ts +0 -3
- package/dist/data/navigation.d.ts.map +0 -1
- package/dist/data/navigation.js +0 -90
- package/dist/data/navigation.js.map +0 -1
- package/dist/extensions/index.d.ts +0 -3
- package/dist/extensions/index.d.ts.map +0 -1
- package/dist/extensions/index.js +0 -9
- package/dist/extensions/index.js.map +0 -1
- package/dist/extensions/llama/client.d.ts +0 -61
- package/dist/extensions/llama/client.d.ts.map +0 -1
- package/dist/extensions/llama/client.js +0 -309
- package/dist/extensions/llama/client.js.map +0 -1
- package/dist/extensions/llama/huggingface.d.ts +0 -23
- package/dist/extensions/llama/huggingface.d.ts.map +0 -1
- package/dist/extensions/llama/huggingface.js +0 -146
- package/dist/extensions/llama/huggingface.js.map +0 -1
- package/dist/extensions/llama/index.d.ts +0 -3
- package/dist/extensions/llama/index.d.ts.map +0 -1
- package/dist/extensions/llama/index.js +0 -211
- package/dist/extensions/llama/index.js.map +0 -1
- package/dist/extensions/llama/provider.d.ts +0 -10
- package/dist/extensions/llama/provider.d.ts.map +0 -1
- package/dist/extensions/llama/provider.js +0 -106
- package/dist/extensions/llama/provider.js.map +0 -1
- package/dist/extensions/llama/ui.d.ts +0 -42
- package/dist/extensions/llama/ui.d.ts.map +0 -1
- package/dist/extensions/llama/ui.js +0 -420
- package/dist/extensions/llama/ui.js.map +0 -1
- package/dist/extensions/pi-intercom/lifecycle.test.ts +0 -60
- package/dist/extensions/pi-subagents/src/runs/background/wait.ts +0 -353
- package/dist/extensions/pi-subagents/test/unit/live-async-resume.test.ts +0 -170
- package/dist/extensions/pi-subagents/test/unit/wait.test.ts +0 -398
- package/dist/extensions/question/dialog-adapter.ts +0 -96
- package/dist/extensions/question/tests/ui-protocol.test.ts +0 -157
- package/dist/extensions/question/tui-adapter.ts +0 -15
- package/dist/extensions/question/ui-protocol.ts +0 -31
- package/dist/extensions/workflow/modes/quick.ts +0 -150
- package/dist/modes/interactive/interactive-mode.test.d.ts +0 -2
- package/dist/modes/interactive/interactive-mode.test.d.ts.map +0 -1
- package/dist/modes/interactive/interactive-mode.test.js +0 -45
- package/dist/modes/interactive/interactive-mode.test.js.map +0 -1
|
@@ -21,6 +21,7 @@ interface TerminalSplitCompositorOptions {
|
|
|
21
21
|
getShowHardwareCursor?: () => boolean;
|
|
22
22
|
mouseScroll?: boolean;
|
|
23
23
|
keyboardScrollShortcuts?: KeyboardScrollShortcuts;
|
|
24
|
+
shouldCaptureKeyboardScroll?: () => boolean;
|
|
24
25
|
onCopySelection?: (text: string) => void;
|
|
25
26
|
}
|
|
26
27
|
|
|
@@ -318,6 +319,7 @@ export class TerminalSplitCompositor {
|
|
|
318
319
|
private readonly getShowHardwareCursor: () => boolean;
|
|
319
320
|
private readonly mouseScroll: boolean;
|
|
320
321
|
private readonly keyboardScrollShortcuts: KeyboardScrollShortcuts;
|
|
322
|
+
private readonly shouldCaptureKeyboardScroll: () => boolean;
|
|
321
323
|
private readonly onCopySelection: ((text: string) => void) | null;
|
|
322
324
|
private extendedKeyboardMode: ExtendedKeyboardMode | null = null;
|
|
323
325
|
private readonly rowsDescriptor: PropertyDescriptor | undefined;
|
|
@@ -360,6 +362,7 @@ export class TerminalSplitCompositor {
|
|
|
360
362
|
this.getShowHardwareCursor = options.getShowHardwareCursor ?? (() => false);
|
|
361
363
|
this.mouseScroll = options.mouseScroll !== false;
|
|
362
364
|
this.keyboardScrollShortcuts = options.keyboardScrollShortcuts ?? DEFAULT_KEYBOARD_SCROLL_SHORTCUTS;
|
|
365
|
+
this.shouldCaptureKeyboardScroll = options.shouldCaptureKeyboardScroll ?? (() => true);
|
|
363
366
|
this.onCopySelection = options.onCopySelection ?? null;
|
|
364
367
|
this.rowsDescriptor = descriptorForRows(options.terminal);
|
|
365
368
|
this.originalWrite = options.terminal.write.bind(options.terminal);
|
|
@@ -602,7 +605,7 @@ export class TerminalSplitCompositor {
|
|
|
602
605
|
}
|
|
603
606
|
|
|
604
607
|
private handleInput(data: string): { consume?: boolean; data?: string } | undefined {
|
|
605
|
-
if (this.disposed || this.hasVisibleOverlay()) return undefined;
|
|
608
|
+
if (this.disposed || this.hasVisibleOverlay() || !this.shouldCaptureKeyboardScroll()) return undefined;
|
|
606
609
|
|
|
607
610
|
const mousePackets = this.mouseScroll ? parseSgrMousePackets(data) : null;
|
|
608
611
|
if (mousePackets) {
|
|
@@ -2386,6 +2386,7 @@ export default function powerlineFooter(pi: ExtensionAPI) {
|
|
|
2386
2386
|
up: resolvedShortcuts.scrollChatUp,
|
|
2387
2387
|
down: resolvedShortcuts.scrollChatDown,
|
|
2388
2388
|
},
|
|
2389
|
+
shouldCaptureKeyboardScroll: () => Reflect.get(tui, "focusedComponent") === currentEditor,
|
|
2389
2390
|
onCopySelection: (text) => copyTextToClipboard(ctx, text),
|
|
2390
2391
|
getShowHardwareCursor: () => typeof tui.getShowHardwareCursor === "function" && tui.getShowHardwareCursor(),
|
|
2391
2392
|
renderCluster: (width, terminalRows) => {
|
|
@@ -299,8 +299,8 @@ async function resumeController(
|
|
|
299
299
|
}
|
|
300
300
|
const ls = controller.loopState;
|
|
301
301
|
continueAgent(pi, ctx, ls.stage === "reviewing"
|
|
302
|
-
? `Resume the loop at review round ${ls.reviewRound + 1}: call the subagent tool now with { agent: "commentator", task: "..." }
|
|
303
|
-
: `Resume the loop at review round ${ls.reviewRound}: call the subagent tool now with { agent: "builder", task: "..." } to address the feedback in ${sm.snapshot.artifactDir}/${ls.reviewPath ?? "loop-review-<round>.md"}.`);
|
|
302
|
+
? `Resume the loop at review round ${ls.reviewRound + 1}: call the subagent tool now with { agent: "commentator", task: "..." }. Have the commentator read ${sm.snapshot.artifactDir}/handoff.md and inspect the current uncommitted diff against the handoff acceptance criteria. End the review with WORKFLOW_REVIEW_STATUS: clean or WORKFLOW_REVIEW_STATUS: blocking.`
|
|
303
|
+
: `Resume the loop at review round ${ls.reviewRound}: call the subagent tool now with { agent: "builder", task: "..." } to address the feedback in ${sm.snapshot.artifactDir}/${ls.reviewPath ?? "loop-review-<round>.md"}, using ${sm.snapshot.artifactDir}/handoff.md as the source of truth for the goal and acceptance criteria.`);
|
|
304
304
|
} else {
|
|
305
305
|
applyControllerEffect(controller, ctx, current);
|
|
306
306
|
}
|
|
@@ -4,24 +4,37 @@ import type {
|
|
|
4
4
|
WorkflowConfig,
|
|
5
5
|
WorkflowModeRegistration,
|
|
6
6
|
} from "../state-machine.ts";
|
|
7
|
-
import { loopCompleteValidator } from "../validators.ts";
|
|
7
|
+
import { handoffValidator, loopCompleteValidator } from "../validators.ts";
|
|
8
8
|
|
|
9
|
-
// Direct build↔review mode
|
|
10
|
-
//
|
|
11
|
-
//
|
|
12
|
-
const phases: Phase[] = ["loop"];
|
|
9
|
+
// Direct build↔review mode with a parent-persisted handoff artifact. The handoff
|
|
10
|
+
// lets fresh builder/commentator subagents work from a self-contained document
|
|
11
|
+
// instead of relying on the parent conversation.
|
|
12
|
+
const phases: Phase[] = ["handoff", "loop"];
|
|
13
13
|
|
|
14
14
|
const prompts: Partial<Record<Phase, (ctx: PromptContext) => string>> = {
|
|
15
|
+
handoff: ({ artifactDir, userPrompt }) =>
|
|
16
|
+
`You are in the HANDOFF phase of a LOOP workflow.
|
|
17
|
+
|
|
18
|
+
Original goal:
|
|
19
|
+
${userPrompt}
|
|
20
|
+
|
|
21
|
+
Compile a self-contained handoff document so loop-phase sub-agents understand the goal, constraints, acceptance criteria, and relevant workspace context without re-grilling or re-planning.
|
|
22
|
+
|
|
23
|
+
Call the subagent tool with { agent: "recapper", task: "...", output: false } (do NOT pass a model parameter). Point it at the original goal above and instruct it to use the inherited conversation to produce a concise, self-contained handoff for fresh agents. It must return the complete handoff inline; do not tell it to write any artifact.
|
|
24
|
+
|
|
25
|
+
Inspect that result, verify it ends with exactly one machine-readable line on its own:
|
|
26
|
+
WORKFLOW_HANDOFF_STATUS: ready
|
|
27
|
+
Then immediately call write_workflow_artifact with the complete validated handoff as content. Only that parent tool call writes ${artifactDir}/handoff.md and advances the workflow.`,
|
|
15
28
|
loop: ({ artifactDir, userPrompt, loopMaxIterations }) =>
|
|
16
|
-
`You are in the LOOP phase of a LOOP workflow. The
|
|
29
|
+
`You are in the LOOP phase of a LOOP workflow. The workflow ENGINE owns build→review rounds and persists review feedback.
|
|
17
30
|
|
|
18
31
|
Original goal:
|
|
19
32
|
${userPrompt}
|
|
20
33
|
|
|
21
|
-
|
|
34
|
+
Use read to inspect ${artifactDir}/handoff.md. Using that handoff context — not the parent conversation — generate your own delegation prompt.
|
|
22
35
|
|
|
23
|
-
1. Call the subagent tool with { agent: "builder", task: "...", output: false } (do NOT pass a model parameter).
|
|
24
|
-
2. Call the subagent tool with { agent: "commentator", task: "...", output: false }. Give it the
|
|
36
|
+
1. Call the subagent tool with { agent: "builder", task: "...", output: false } (do NOT pass a model parameter). Give it the handoff context. Instruct it to implement the agreed work in the workspace only, run relevant checks, and return an inline completion summary with checks run. If a previous blocking review exists (e.g. ${artifactDir}/loop-review-1.md), direct the builder to read the persisted review and address every issue before returning.
|
|
37
|
+
2. Call the subagent tool with { agent: "commentator", task: "...", output: false }. Give it the handoff context. Require independent validation: inspect the current uncommitted diff, verify the handoff acceptance criteria and correctness, run relevant checks where feasible, and report evidence. Its review must end with exactly one machine-readable line:
|
|
25
38
|
WORKFLOW_REVIEW_STATUS: clean
|
|
26
39
|
OR
|
|
27
40
|
WORKFLOW_REVIEW_STATUS: blocking
|
|
@@ -33,10 +46,16 @@ When review is clean, the engine writes ${artifactDir}/loop-complete.md and make
|
|
|
33
46
|
const config: WorkflowConfig = {
|
|
34
47
|
mode: "loop",
|
|
35
48
|
phases,
|
|
36
|
-
phaseArtifacts: {
|
|
49
|
+
phaseArtifacts: {
|
|
50
|
+
handoff: "handoff.md",
|
|
51
|
+
loop: "loop-complete.md",
|
|
52
|
+
},
|
|
37
53
|
prompts,
|
|
38
54
|
skipRules: [],
|
|
39
|
-
artifactValidators: {
|
|
55
|
+
artifactValidators: {
|
|
56
|
+
handoff: handoffValidator,
|
|
57
|
+
loop: loopCompleteValidator,
|
|
58
|
+
},
|
|
40
59
|
closeValidators: { "loop-complete.md": loopCompleteValidator },
|
|
41
60
|
closeArtifacts: ["loop-complete.md"],
|
|
42
61
|
loopMaxIterations: 3,
|
package/docs/workflows.md
CHANGED
|
@@ -133,11 +133,11 @@ Lifecycle: `plan → reuse → handoff → loop (build ↔ review) → terminal-
|
|
|
133
133
|
|
|
134
134
|
### `loop` — direct build/review loop
|
|
135
135
|
|
|
136
|
-
Use this after the plan was already agreed in the current conversation. It
|
|
136
|
+
Use this after the plan was already agreed in the current conversation. It captures the agreed context into a parent-owned `handoff.md` artifact, then runs an engine-owned `loop` phase: builder changes workspace code, commentator independently validates the diff and relevant checks, then blocking feedback returns to the builder (max 3 blocking rounds). A clean review writes `loop-complete.md`, makes the run terminal-ready, and requires explicit completion.
|
|
137
137
|
|
|
138
|
-
Fresh subagents do not inherit the parent conversation.
|
|
138
|
+
Fresh subagents do not inherit the parent conversation. The parent forks a `recapper` subagent once to synthesize a concise, self-contained handoff document directly from the inherited conversation. The parent validates the handoff marker and writes `handoff.md` via `write_workflow_artifact`. After that, every builder and commentator call reads `handoff.md` instead of relying on the parent conversation. Persisted `loop-review-N.md` files feed blocking fixes back to the builder.
|
|
139
139
|
|
|
140
|
-
Lifecycle: `loop (build ↔ review) → terminal-ready → end_workflow({ mode: "loop" })`
|
|
140
|
+
Lifecycle: `handoff → loop (build ↔ review) → terminal-ready → end_workflow({ mode: "loop" })`
|
|
141
141
|
|
|
142
142
|
- `/workflow-loop <goal>` — start a direct build/review run
|
|
143
143
|
- `/workflow-loop resume` / `/workflow-loop resume <id-or-artifact-dir-or-workflow.json>` — list or resume a run
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@selesai/code",
|
|
3
|
-
"version": "0.5.
|
|
3
|
+
"version": "0.5.26",
|
|
4
4
|
"description": "Maintained, extension-first Pi coding agent with built-in workflows, subagents, web research, questions, skills, and an enhanced terminal UI.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"repository": {
|
|
@@ -50,7 +50,7 @@
|
|
|
50
50
|
],
|
|
51
51
|
"scripts": {
|
|
52
52
|
"clean": "shx rm -rf dist",
|
|
53
|
-
"build": "tsgo -p tsconfig.build.json && shx chmod +x dist/cli.js dist/rpc-entry.js && npm run copy-assets",
|
|
53
|
+
"build": "npm run clean && tsgo -p tsconfig.build.json && shx chmod +x dist/cli.js dist/rpc-entry.js && npm run copy-assets",
|
|
54
54
|
"copy-assets": "shx mkdir -p dist/modes/interactive/theme && shx cp src/modes/interactive/theme/*.json dist/modes/interactive/theme/ && shx mkdir -p dist/modes/interactive/assets && shx cp src/modes/interactive/assets/*.png dist/modes/interactive/assets/ && shx mkdir -p dist/core/export-html/vendor && shx cp src/core/export-html/template.html src/core/export-html/template.css src/core/export-html/template.js dist/core/export-html/ && shx cp src/core/export-html/vendor/*.js dist/core/export-html/vendor/ && shx mkdir -p dist/defaults && shx cp src/defaults/* dist/defaults/ && shx mkdir -p dist/extensions && shx cp -r src/extensions/. dist/extensions/ && shx mkdir -p dist/themes && shx cp -r src/themes/. dist/themes/ && shx mkdir -p dist/skills && shx cp -r src/skills/. dist/skills/"
|
|
55
55
|
},
|
|
56
56
|
"dependencies": {
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"provider-display-names.d.ts","sourceRoot":"","sources":["../../src/core/provider-display-names.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,+BAA+B,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAkClE,CAAC","sourcesContent":["export const BUILT_IN_PROVIDER_DISPLAY_NAMES: Record<string, string> = {\n\tanthropic: \"Anthropic\",\n\t\"amazon-bedrock\": \"Amazon Bedrock\",\n\t\"ant-ling\": \"Ant Ling\",\n\t\"azure-openai-responses\": \"Azure OpenAI Responses\",\n\tcerebras: \"Cerebras\",\n\t\"cloudflare-ai-gateway\": \"Cloudflare AI Gateway\",\n\t\"cloudflare-workers-ai\": \"Cloudflare Workers AI\",\n\tdeepseek: \"DeepSeek\",\n\tfireworks: \"Fireworks\",\n\tgoogle: \"Google Gemini\",\n\t\"google-vertex\": \"Google Vertex AI\",\n\tgroq: \"Groq\",\n\thuggingface: \"Hugging Face\",\n\t\"kimi-coding\": \"Kimi For Coding\",\n\tmistral: \"Mistral\",\n\tminimax: \"MiniMax\",\n\t\"minimax-cn\": \"MiniMax (China)\",\n\tmoonshotai: \"Moonshot AI\",\n\t\"moonshotai-cn\": \"Moonshot AI (China)\",\n\tnvidia: \"NVIDIA NIM\",\n\topencode: \"OpenCode Zen\",\n\t\"opencode-go\": \"OpenCode Go\",\n\topenai: \"OpenAI\",\n\topenrouter: \"OpenRouter\",\n\ttogether: \"Together AI\",\n\t\"vercel-ai-gateway\": \"Vercel AI Gateway\",\n\txai: \"xAI\",\n\tzai: \"ZAI Coding Plan (Global)\",\n\t\"zai-coding-cn\": \"ZAI Coding Plan (China)\",\n\txiaomi: \"Xiaomi MiMo\",\n\t\"xiaomi-token-plan-cn\": \"Xiaomi MiMo Token Plan (China)\",\n\t\"xiaomi-token-plan-ams\": \"Xiaomi MiMo Token Plan (Amsterdam)\",\n\t\"xiaomi-token-plan-sgp\": \"Xiaomi MiMo Token Plan (Singapore)\",\n};\n"]}
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
export const BUILT_IN_PROVIDER_DISPLAY_NAMES = {
|
|
2
|
-
anthropic: "Anthropic",
|
|
3
|
-
"amazon-bedrock": "Amazon Bedrock",
|
|
4
|
-
"ant-ling": "Ant Ling",
|
|
5
|
-
"azure-openai-responses": "Azure OpenAI Responses",
|
|
6
|
-
cerebras: "Cerebras",
|
|
7
|
-
"cloudflare-ai-gateway": "Cloudflare AI Gateway",
|
|
8
|
-
"cloudflare-workers-ai": "Cloudflare Workers AI",
|
|
9
|
-
deepseek: "DeepSeek",
|
|
10
|
-
fireworks: "Fireworks",
|
|
11
|
-
google: "Google Gemini",
|
|
12
|
-
"google-vertex": "Google Vertex AI",
|
|
13
|
-
groq: "Groq",
|
|
14
|
-
huggingface: "Hugging Face",
|
|
15
|
-
"kimi-coding": "Kimi For Coding",
|
|
16
|
-
mistral: "Mistral",
|
|
17
|
-
minimax: "MiniMax",
|
|
18
|
-
"minimax-cn": "MiniMax (China)",
|
|
19
|
-
moonshotai: "Moonshot AI",
|
|
20
|
-
"moonshotai-cn": "Moonshot AI (China)",
|
|
21
|
-
nvidia: "NVIDIA NIM",
|
|
22
|
-
opencode: "OpenCode Zen",
|
|
23
|
-
"opencode-go": "OpenCode Go",
|
|
24
|
-
openai: "OpenAI",
|
|
25
|
-
openrouter: "OpenRouter",
|
|
26
|
-
together: "Together AI",
|
|
27
|
-
"vercel-ai-gateway": "Vercel AI Gateway",
|
|
28
|
-
xai: "xAI",
|
|
29
|
-
zai: "ZAI Coding Plan (Global)",
|
|
30
|
-
"zai-coding-cn": "ZAI Coding Plan (China)",
|
|
31
|
-
xiaomi: "Xiaomi MiMo",
|
|
32
|
-
"xiaomi-token-plan-cn": "Xiaomi MiMo Token Plan (China)",
|
|
33
|
-
"xiaomi-token-plan-ams": "Xiaomi MiMo Token Plan (Amsterdam)",
|
|
34
|
-
"xiaomi-token-plan-sgp": "Xiaomi MiMo Token Plan (Singapore)",
|
|
35
|
-
};
|
|
36
|
-
//# sourceMappingURL=provider-display-names.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"provider-display-names.js","sourceRoot":"","sources":["../../src/core/provider-display-names.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,+BAA+B,GAA2B;IACtE,SAAS,EAAE,WAAW;IACtB,gBAAgB,EAAE,gBAAgB;IAClC,UAAU,EAAE,UAAU;IACtB,wBAAwB,EAAE,wBAAwB;IAClD,QAAQ,EAAE,UAAU;IACpB,uBAAuB,EAAE,uBAAuB;IAChD,uBAAuB,EAAE,uBAAuB;IAChD,QAAQ,EAAE,UAAU;IACpB,SAAS,EAAE,WAAW;IACtB,MAAM,EAAE,eAAe;IACvB,eAAe,EAAE,kBAAkB;IACnC,IAAI,EAAE,MAAM;IACZ,WAAW,EAAE,cAAc;IAC3B,aAAa,EAAE,iBAAiB;IAChC,OAAO,EAAE,SAAS;IAClB,OAAO,EAAE,SAAS;IAClB,YAAY,EAAE,iBAAiB;IAC/B,UAAU,EAAE,aAAa;IACzB,eAAe,EAAE,qBAAqB;IACtC,MAAM,EAAE,YAAY;IACpB,QAAQ,EAAE,cAAc;IACxB,aAAa,EAAE,aAAa;IAC5B,MAAM,EAAE,QAAQ;IAChB,UAAU,EAAE,YAAY;IACxB,QAAQ,EAAE,aAAa;IACvB,mBAAmB,EAAE,mBAAmB;IACxC,GAAG,EAAE,KAAK;IACV,GAAG,EAAE,0BAA0B;IAC/B,eAAe,EAAE,yBAAyB;IAC1C,MAAM,EAAE,aAAa;IACrB,sBAAsB,EAAE,gCAAgC;IACxD,uBAAuB,EAAE,oCAAoC;IAC7D,uBAAuB,EAAE,oCAAoC;CAC7D,CAAC","sourcesContent":["export const BUILT_IN_PROVIDER_DISPLAY_NAMES: Record<string, string> = {\n\tanthropic: \"Anthropic\",\n\t\"amazon-bedrock\": \"Amazon Bedrock\",\n\t\"ant-ling\": \"Ant Ling\",\n\t\"azure-openai-responses\": \"Azure OpenAI Responses\",\n\tcerebras: \"Cerebras\",\n\t\"cloudflare-ai-gateway\": \"Cloudflare AI Gateway\",\n\t\"cloudflare-workers-ai\": \"Cloudflare Workers AI\",\n\tdeepseek: \"DeepSeek\",\n\tfireworks: \"Fireworks\",\n\tgoogle: \"Google Gemini\",\n\t\"google-vertex\": \"Google Vertex AI\",\n\tgroq: \"Groq\",\n\thuggingface: \"Hugging Face\",\n\t\"kimi-coding\": \"Kimi For Coding\",\n\tmistral: \"Mistral\",\n\tminimax: \"MiniMax\",\n\t\"minimax-cn\": \"MiniMax (China)\",\n\tmoonshotai: \"Moonshot AI\",\n\t\"moonshotai-cn\": \"Moonshot AI (China)\",\n\tnvidia: \"NVIDIA NIM\",\n\topencode: \"OpenCode Zen\",\n\t\"opencode-go\": \"OpenCode Go\",\n\topenai: \"OpenAI\",\n\topenrouter: \"OpenRouter\",\n\ttogether: \"Together AI\",\n\t\"vercel-ai-gateway\": \"Vercel AI Gateway\",\n\txai: \"xAI\",\n\tzai: \"ZAI Coding Plan (Global)\",\n\t\"zai-coding-cn\": \"ZAI Coding Plan (China)\",\n\txiaomi: \"Xiaomi MiMo\",\n\t\"xiaomi-token-plan-cn\": \"Xiaomi MiMo Token Plan (China)\",\n\t\"xiaomi-token-plan-ams\": \"Xiaomi MiMo Token Plan (Amsterdam)\",\n\t\"xiaomi-token-plan-sgp\": \"Xiaomi MiMo Token Plan (Singapore)\",\n};\n"]}
|
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
export type Category = "delegation-and-workflows" | "research-and-interaction" | "continuity-and-recovery" | "terminal-workspace" | "skills-and-productivity";
|
|
2
|
-
export interface Capability {
|
|
3
|
-
slug: string;
|
|
4
|
-
category: Category;
|
|
5
|
-
en: {
|
|
6
|
-
displayName: string;
|
|
7
|
-
benefit: string;
|
|
8
|
-
};
|
|
9
|
-
id: {
|
|
10
|
-
displayName: string;
|
|
11
|
-
benefit: string;
|
|
12
|
-
};
|
|
13
|
-
sourcePaths: string[];
|
|
14
|
-
sourceLinks: {
|
|
15
|
-
text: string;
|
|
16
|
-
url: string;
|
|
17
|
-
}[];
|
|
18
|
-
guideRoute: string;
|
|
19
|
-
piComparison: "core-differentiator" | "bundled" | "ergonomic" | "reference";
|
|
20
|
-
}
|
|
21
|
-
export declare const categories: {
|
|
22
|
-
id: Category;
|
|
23
|
-
en: string;
|
|
24
|
-
id: string;
|
|
25
|
-
}[];
|
|
26
|
-
export declare const capabilities: Capability[];
|
|
27
|
-
export declare function capabilitiesByCategory(cat: Category): Capability[];
|
|
28
|
-
export declare function getCapability(slug: string): Capability | undefined;
|
|
29
|
-
export declare function categoryLabel(cat: Category, locale: "en" | "id"): string;
|
|
30
|
-
export declare const EN_LABELS: {
|
|
31
|
-
install: string;
|
|
32
|
-
getStarted: string;
|
|
33
|
-
whySelesai: string;
|
|
34
|
-
capabilities: string;
|
|
35
|
-
evidence: string;
|
|
36
|
-
changelog: string;
|
|
37
|
-
accessibility: string;
|
|
38
|
-
};
|
|
39
|
-
export declare const ID_LABELS: {
|
|
40
|
-
install: string;
|
|
41
|
-
getStarted: string;
|
|
42
|
-
whySelesai: string;
|
|
43
|
-
capabilities: string;
|
|
44
|
-
evidence: string;
|
|
45
|
-
changelog: string;
|
|
46
|
-
accessibility: string;
|
|
47
|
-
};
|
|
48
|
-
//# sourceMappingURL=capabilities.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"capabilities.d.ts","sourceRoot":"","sources":["../../src/data/capabilities.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,QAAQ,GAChB,0BAA0B,GAC1B,0BAA0B,GAC1B,yBAAyB,GACzB,oBAAoB,GACpB,yBAAyB,CAAC;AAE9B,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,QAAQ,CAAC;IACnB,EAAE,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAC7C,EAAE,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAC7C,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,WAAW,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC7C,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,qBAAqB,GAAG,SAAS,GAAG,WAAW,GAAG,WAAW,CAAC;CAC7E;AAUD,eAAO,MAAM,UAAU,EAAE;IAAE,EAAE,EAAE,QAAQ,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,EAMhE,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,UAAU,EAgPpC,CAAC;AAEF,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,QAAQ,gBAEnD;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,0BAEzC;AAED,wBAAgB,aAAa,CAAC,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,GAAG,IAAI,UAE/D;AAED,eAAO,MAAM,SAAS;;;;;;;;CAQrB,CAAC;AAEF,eAAO,MAAM,SAAS;;;;;;;;CAQrB,CAAC","sourcesContent":["export type Category =\n | \"delegation-and-workflows\"\n | \"research-and-interaction\"\n | \"continuity-and-recovery\"\n | \"terminal-workspace\"\n | \"skills-and-productivity\";\n\nexport interface Capability {\n slug: string;\n category: Category;\n en: { displayName: string; benefit: string };\n id: { displayName: string; benefit: string };\n sourcePaths: string[];\n sourceLinks: { text: string; url: string }[];\n guideRoute: string;\n piComparison: \"core-differentiator\" | \"bundled\" | \"ergonomic\" | \"reference\";\n}\n\nconst repo = \"https://github.com/SelesaiInTech/selesai-code/blob/main\";\n\nconst srcPath = (paths: string[]) => paths;\nconst links = (label: string, path: string) => ({\n text: label,\n url: `${repo}/${path}`,\n});\n\nexport const categories: { id: Category; en: string; id: string }[] = [\n { id: \"delegation-and-workflows\", en: \"Delegation and workflows\", id: \"Delegasi dan alur kerja\" },\n { id: \"research-and-interaction\", en: \"Research and interaction\", id: \"Riset dan interaksi\" },\n { id: \"continuity-and-recovery\", en: \"Continuity and recovery\", id: \"Kontinuitas dan pemulihan\" },\n { id: \"terminal-workspace\", en: \"Terminal workspace\", id: \"Ruang kerja terminal\" },\n { id: \"skills-and-productivity\", en: \"Skills and productivity\", id: \"Skill dan produktivitas\" },\n];\n\nexport const capabilities: Capability[] = [\n {\n slug: \"pi-subagents\",\n category: \"delegation-and-workflows\",\n en: { displayName: \"Subagent delegation\", benefit: \"Run focused in-tree agent roles in foreground, background, parallel, or chained modes with tooling and model controls.\" },\n id: { displayName: \"Delegasi subagent\", benefit: \"Jalankan peran agent yang fokus secara in-tree dalam mode foreground, background, paralel, atau berantai dengan kontrol tooling dan model.\" },\n sourcePaths: [\"src/extensions/pi-subagents/\", \"README.md\"],\n sourceLinks: [\n links(\"Extension source\", \"src/extensions/pi-subagents/\"),\n links(\"README mention\", \"README.md\"),\n ],\n guideRoute: \"capabilities/delegation/pi-subagents\",\n piComparison: \"core-differentiator\",\n },\n {\n slug: \"workflow\",\n category: \"delegation-and-workflows\",\n en: { displayName: \"Durable workflows\", benefit: \"Resumeable, stateful project workflows across prototype, quick, and task modes with explicit lifecycle management.\" },\n id: { displayName: \"Workflow tahan lama\", benefit: \"Alur kerja proyek yang stateful dan dapat dilanjutkan kembali dengan mode prototype, quick, dan task serta manajemen siklus hidup eksplisit.\" },\n sourcePaths: [\"src/extensions/workflow/\", \"README.md\"],\n sourceLinks: [\n links(\"Workflow source\", \"src/extensions/workflow/\"),\n links(\"README mention\", \"README.md\"),\n ],\n guideRoute: \"capabilities/delegation/workflow\",\n piComparison: \"core-differentiator\",\n },\n {\n slug: \"pi-web-agent\",\n category: \"research-and-interaction\",\n en: { displayName: \"Web research\", benefit: \"Single `web_explore` research tool with bounded search, fetch, source ranking, and headless-browser escalation.\" },\n id: { displayName: \"Riset web\", benefit: \"Satu peralatan `web_explore` untuk riset dengan pencarian terbatas, fetch, peringkat sumber, dan eskalasi headless browser.\" },\n sourcePaths: [\"src/extensions/pi-web-agent/\", \"README.md\"],\n sourceLinks: [\n links(\"Web agent source\", \"src/extensions/pi-web-agent/\"),\n links(\"README mention\", \"README.md\"),\n ],\n guideRoute: \"capabilities/research/web-agent\",\n piComparison: \"bundled\",\n },\n {\n slug: \"question\",\n category: \"research-and-interaction\",\n en: { displayName: \"Interactive questions\", benefit: \"TUI for single, multi-select, freeform, and image/info questions with keyboard navigation and filtering.\" },\n id: { displayName: \"Pertanyaan interaktif\", benefit: \"TUI untuk pertanyaan single/multi-select, freeform, dan image/info dengan navigasi keyboard dan filtering.\" },\n sourcePaths: [\"src/extensions/question/\", \"README.md\"],\n sourceLinks: [\n links(\"Question source\", \"src/extensions/question/\"),\n links(\"README mention\", \"README.md\"),\n ],\n guideRoute: \"capabilities/research/question\",\n piComparison: \"bundled\",\n },\n {\n slug: \"grep-app\",\n category: \"research-and-interaction\",\n en: { displayName: \"Public code search\", benefit: \"Search GitHub code through grep.app and fetch matching source without leaving the agent.\" },\n id: { displayName: \"Pencarian kode publik\", benefit: \"Cari kode GitHub melalui grep.app dan ambil source yang cocok tanpa meninggalkan agent.\" },\n sourcePaths: [\"src/extensions/grep-app/\", \"README.md\"],\n sourceLinks: [\n links(\"grep.app source\", \"src/extensions/grep-app/\"),\n links(\"README mention\", \"README.md\"),\n ],\n guideRoute: \"capabilities/research/grep-app\",\n piComparison: \"bundled\",\n },\n {\n slug: \"pi-intercom\",\n category: \"continuity-and-recovery\",\n en: { displayName: \"Session coordination\", benefit: \"Local 1:1 session messaging, ask/reply, and attachments between named Selesai sessions.\" },\n id: { displayName: \"Koordinasi sesi\", benefit: \"Pesan lokal 1:1 antar sesi Selesai yang diberi nama, ask/reply, dan lampiran.\" },\n sourcePaths: [\"src/extensions/pi-intercom/\", \"README.md\"],\n sourceLinks: [\n links(\"Intercom source\", \"src/extensions/pi-intercom/\"),\n links(\"README mention\", \"README.md\"),\n ],\n guideRoute: \"capabilities/continuity/intercom\",\n piComparison: \"bundled\",\n },\n {\n slug: \"undo\",\n category: \"continuity-and-recovery\",\n en: { displayName: \"Turn-level undo\", benefit: \"Undo tracked edits, writes, and detected mutating shell commands one turn at a time.\" },\n id: { displayName: \"Undo per turn\", benefit: \"Batalkan edit, write, dan shell command bermutasi yang terdeteksi satu turn demi satu turn.\" },\n sourcePaths: [\"src/extensions/undo.ts\", \"README.md\"],\n sourceLinks: [\n links(\"Undo source\", \"src/extensions/undo.ts\"),\n links(\"README mention\", \"README.md\"),\n ],\n guideRoute: \"capabilities/continuity/undo\",\n piComparison: \"ergonomic\",\n },\n {\n slug: \"copy-turn\",\n category: \"continuity-and-recovery\",\n en: { displayName: \"Copy turn\", benefit: \"Copy a user or assistant result from the session by hash using `/cp <hash>`.\" },\n id: { displayName: \"Salin turn\", benefit: \"Salin hasil user atau assistant dari sesi menggunakan hash dengan `/cp <hash>`.\" },\n sourcePaths: [\"src/extensions/copy-turn.ts\", \"README.md\"],\n sourceLinks: [\n links(\"Copy turn source\", \"src/extensions/copy-turn.ts\"),\n links(\"README mention\", \"README.md\"),\n ],\n guideRoute: \"capabilities/continuity/copy-turn\",\n piComparison: \"ergonomic\",\n },\n {\n slug: \"context-compaction-reminder\",\n category: \"continuity-and-recovery\",\n en: { displayName: \"Context reminder\", benefit: \"Warn when a conversation grows large and suggest `/handoff-new` to reduce context and cost.\" },\n id: { displayName: \"Pengingat konteks\", benefit: \"Peringatkan saat percakapan membesar dan sarankan `/handoff-new` untuk mengurangi konteks dan biaya.\" },\n sourcePaths: [\"src/extensions/context-compaction-reminder.ts\", \"README.md\"],\n sourceLinks: [\n links(\"Reminder source\", \"src/extensions/context-compaction-reminder.ts\"),\n links(\"README mention\", \"README.md\"),\n ],\n guideRoute: \"capabilities/continuity/context-reminder\",\n piComparison: \"ergonomic\",\n },\n {\n slug: \"handoff-new\",\n category: \"continuity-and-recovery\",\n en: { displayName: \"Session handoff\", benefit: \"Create an editable continuation prompt in a clean session to reset context and cut token spend.\" },\n id: { displayName: \"Handoff sesi\", benefit: \"Buat prompt kelanjutan yang dapat diedit dalam sesi bersih untuk mereset konteks dan menghemat token.\" },\n sourcePaths: [\"src/extensions/handoff-new.ts\", \"README.md\", \"src/skills/handoff/\", \"src/skills/selesai-handoff/\"],\n sourceLinks: [\n links(\"Handoff source\", \"src/extensions/handoff-new.ts\"),\n links(\"Handoff skill\", \"src/skills/handoff/\"),\n links(\"README mention\", \"README.md\"),\n ],\n guideRoute: \"capabilities/continuity/handoff-new\",\n piComparison: \"core-differentiator\",\n },\n {\n slug: \"pi-rewind-hook\",\n category: \"continuity-and-recovery\",\n en: { displayName: \"Rewind checkpoints\", benefit: \"Exact git-backed file checkpoints across `/fork`, `/tree`, resumed sessions, and session lineage.\" },\n id: { displayName: \"Checkpoint rewind\", benefit: \"Checkpoint file yang didukung git secara tepat di `/fork`, `/tree`, sesi yang dilanjutkan, dan silsilah sesi.\" },\n sourcePaths: [\"src/extensions/pi-rewind-hook/\", \"README.md\"],\n sourceLinks: [\n links(\"Rewind source\", \"src/extensions/pi-rewind-hook/\"),\n links(\"README mention\", \"README.md\"),\n ],\n guideRoute: \"capabilities/continuity/rewind\",\n piComparison: \"ergonomic\",\n },\n {\n slug: \"pi-powerline-footer\",\n category: \"terminal-workspace\",\n en: { displayName: \"Powerline footer\", benefit: \"Status bar, fixed-editor layout, recurring guide tour, persistent bash, stashes, themes, and Nerd Font detection.\" },\n id: { displayName: \"Footer powerline\", benefit: \"Status bar, tata letak editor tetap, tur panduan berulang, bash persisten, stash, tema, dan deteksi Nerd Font.\" },\n sourcePaths: [\"src/extensions/pi-powerline-footer/\", \"README.md\", \"src/core/footer-data-provider.ts\"],\n sourceLinks: [\n links(\"Footer source\", \"src/extensions/pi-powerline-footer/\"),\n links(\"README mention\", \"README.md\"),\n ],\n guideRoute: \"capabilities/workspace/powerline-footer\",\n piComparison: \"bundled\",\n },\n {\n slug: \"web-agent-onboarding\",\n category: \"terminal-workspace\",\n en: { displayName: \"Web agent onboarding\", benefit: \"First-run Brave Search onboarding for the web agent, with DuckDuckGo fallback.\" },\n id: { displayName: \"Onboarding web agent\", benefit: \"Onboarding Brave Search pertama kali untuk web agent, dengan fallback DuckDuckGo.\" },\n sourcePaths: [\"src/extensions/web-agent-onboarding.ts\", \"src/extensions/pi-web-agent/\", \"README.md\"],\n sourceLinks: [\n links(\"Onboarding source\", \"src/extensions/web-agent-onboarding.ts\"),\n links(\"Web agent source\", \"src/extensions/pi-web-agent/\"),\n links(\"README mention\", \"README.md\"),\n ],\n guideRoute: \"capabilities/workspace/web-agent-onboarding\",\n piComparison: \"bundled\",\n },\n {\n slug: \"tokenin-onboarding\",\n category: \"terminal-workspace\",\n en: { displayName: \"Token onboarding\", benefit: \"First-run onboarding path for provider credentials and API tokens.\" },\n id: { displayName: \"Onboarding token\", benefit: \"Jalur onboarding pertama kali untuk kredensial provider dan token API.\" },\n sourcePaths: [\"src/extensions/tokenin-onboarding.ts\", \"README.md\"],\n sourceLinks: [\n links(\"Token onboarding source\", \"src/extensions/tokenin-onboarding.ts\"),\n links(\"README mention\", \"README.md\"),\n ],\n guideRoute: \"capabilities/workspace/tokenin-onboarding\",\n piComparison: \"bundled\",\n },\n {\n slug: \"inline-skills\",\n category: \"skills-and-productivity\",\n en: { displayName: \"Inline skills\", benefit: \"Lightweight inline skill invitations without separate skill files.\" },\n id: { displayName: \"Skill inline\", benefit: \"Ajakan skill inline ringan tanpa file skill terpisah.\" },\n sourcePaths: [\"src/extensions/inline-skills.ts\", \"README.md\", \"src/core/skills.ts\"],\n sourceLinks: [\n links(\"Inline skills source\", \"src/extensions/inline-skills.ts\"),\n links(\"Skills loader\", \"src/core/skills.ts\"),\n links(\"README mention\", \"README.md\"),\n ],\n guideRoute: \"capabilities/skills/inline-skills\",\n piComparison: \"ergonomic\",\n },\n {\n slug: \"ponytail\",\n category: \"skills-and-productivity\",\n en: { displayName: \"Ponytail communication\", benefit: \"Minimal, compressed communication mode and review helpers invoked via `/skill:ponytail*`.\" },\n id: { displayName: \"Komunikasi Ponytail\", benefit: \"Mode komunikasi minimal dan terkompresi serta helper review, dipanggil via `/skill:ponytail*`.\" },\n sourcePaths: [\"src/extensions/ponytail/\", \"src/skills/ponytail*/\", \"README.md\"],\n sourceLinks: [\n links(\"Ponytail extension\", \"src/extensions/ponytail/\"),\n links(\"Ponytail skills\", \"src/skills/ponytail/\"),\n links(\"README mention\", \"README.md\"),\n ],\n guideRoute: \"capabilities/skills/ponytail\",\n piComparison: \"bundled\",\n },\n {\n slug: \"caveman\",\n category: \"skills-and-productivity\",\n en: { displayName: \"Caveman communication\", benefit: \"Abbreviated, focused response style invoked via `/skill:caveman`.\" },\n id: { displayName: \"Komunikasi Caveman\", benefit: \"Gaya responsi yang dipersingkat dan fokus, dipanggil via `/skill:caveman`.\" },\n sourcePaths: [\"src/extensions/caveman/\", \"src/skills/caveman/\", \"README.md\"],\n sourceLinks: [\n links(\"Caveman extension\", \"src/extensions/caveman/\"),\n links(\"Caveman skill\", \"src/skills/caveman/\"),\n links(\"README mention\", \"README.md\"),\n ],\n guideRoute: \"capabilities/skills/caveman\",\n piComparison: \"bundled\",\n },\n {\n slug: \"rtk\",\n category: \"skills-and-productivity\",\n en: { displayName: \"RTK integration\", benefit: \"Rewrite compatible shell commands to reduce noisy output and token burn when `rtk` is installed.\" },\n id: { displayName: \"Integrasi RTK\", benefit: \"Tulis ulang shell command yang kompatibel untuk mengurangi output berisik dan penggunaan token saat `rtk` terpasang.\" },\n sourcePaths: [\"src/extensions/rtk.ts\", \"README.md\"],\n sourceLinks: [\n links(\"RTK source\", \"src/extensions/rtk.ts\"),\n links(\"README mention\", \"README.md\"),\n ],\n guideRoute: \"capabilities/skills/rtk\",\n piComparison: \"ergonomic\",\n },\n];\n\nexport function capabilitiesByCategory(cat: Category) {\n return capabilities.filter((c) => c.category === cat);\n}\n\nexport function getCapability(slug: string) {\n return capabilities.find((c) => c.slug === slug);\n}\n\nexport function categoryLabel(cat: Category, locale: \"en\" | \"id\") {\n return categories.find((c) => c.id === cat)?.[locale] ?? cat;\n}\n\nexport const EN_LABELS = {\n install: \"Install\",\n getStarted: \"Get started\",\n whySelesai: \"Why Selesai\",\n capabilities: \"Capabilities\",\n evidence: \"Evidence\",\n changelog: \"Changelog\",\n accessibility: \"Accessibility & privacy\",\n};\n\nexport const ID_LABELS = {\n install: \"Instal\",\n getStarted: \"Mulai\",\n whySelesai: \"Mengapa Selesai\",\n capabilities: \"Kemampuan\",\n evidence: \"Bukti dan metodologi\",\n changelog: \"Changelog\",\n accessibility: \"Aksesibilitas & privasi\",\n};\n"]}
|
|
@@ -1,282 +0,0 @@
|
|
|
1
|
-
const repo = "https://github.com/SelesaiInTech/selesai-code/blob/main";
|
|
2
|
-
const srcPath = (paths) => paths;
|
|
3
|
-
const links = (label, path) => ({
|
|
4
|
-
text: label,
|
|
5
|
-
url: `${repo}/${path}`,
|
|
6
|
-
});
|
|
7
|
-
export const categories = [
|
|
8
|
-
{ id: "delegation-and-workflows", en: "Delegation and workflows", id: "Delegasi dan alur kerja" },
|
|
9
|
-
{ id: "research-and-interaction", en: "Research and interaction", id: "Riset dan interaksi" },
|
|
10
|
-
{ id: "continuity-and-recovery", en: "Continuity and recovery", id: "Kontinuitas dan pemulihan" },
|
|
11
|
-
{ id: "terminal-workspace", en: "Terminal workspace", id: "Ruang kerja terminal" },
|
|
12
|
-
{ id: "skills-and-productivity", en: "Skills and productivity", id: "Skill dan produktivitas" },
|
|
13
|
-
];
|
|
14
|
-
export const capabilities = [
|
|
15
|
-
{
|
|
16
|
-
slug: "pi-subagents",
|
|
17
|
-
category: "delegation-and-workflows",
|
|
18
|
-
en: { displayName: "Subagent delegation", benefit: "Run focused in-tree agent roles in foreground, background, parallel, or chained modes with tooling and model controls." },
|
|
19
|
-
id: { displayName: "Delegasi subagent", benefit: "Jalankan peran agent yang fokus secara in-tree dalam mode foreground, background, paralel, atau berantai dengan kontrol tooling dan model." },
|
|
20
|
-
sourcePaths: ["src/extensions/pi-subagents/", "README.md"],
|
|
21
|
-
sourceLinks: [
|
|
22
|
-
links("Extension source", "src/extensions/pi-subagents/"),
|
|
23
|
-
links("README mention", "README.md"),
|
|
24
|
-
],
|
|
25
|
-
guideRoute: "capabilities/delegation/pi-subagents",
|
|
26
|
-
piComparison: "core-differentiator",
|
|
27
|
-
},
|
|
28
|
-
{
|
|
29
|
-
slug: "workflow",
|
|
30
|
-
category: "delegation-and-workflows",
|
|
31
|
-
en: { displayName: "Durable workflows", benefit: "Resumeable, stateful project workflows across prototype, quick, and task modes with explicit lifecycle management." },
|
|
32
|
-
id: { displayName: "Workflow tahan lama", benefit: "Alur kerja proyek yang stateful dan dapat dilanjutkan kembali dengan mode prototype, quick, dan task serta manajemen siklus hidup eksplisit." },
|
|
33
|
-
sourcePaths: ["src/extensions/workflow/", "README.md"],
|
|
34
|
-
sourceLinks: [
|
|
35
|
-
links("Workflow source", "src/extensions/workflow/"),
|
|
36
|
-
links("README mention", "README.md"),
|
|
37
|
-
],
|
|
38
|
-
guideRoute: "capabilities/delegation/workflow",
|
|
39
|
-
piComparison: "core-differentiator",
|
|
40
|
-
},
|
|
41
|
-
{
|
|
42
|
-
slug: "pi-web-agent",
|
|
43
|
-
category: "research-and-interaction",
|
|
44
|
-
en: { displayName: "Web research", benefit: "Single `web_explore` research tool with bounded search, fetch, source ranking, and headless-browser escalation." },
|
|
45
|
-
id: { displayName: "Riset web", benefit: "Satu peralatan `web_explore` untuk riset dengan pencarian terbatas, fetch, peringkat sumber, dan eskalasi headless browser." },
|
|
46
|
-
sourcePaths: ["src/extensions/pi-web-agent/", "README.md"],
|
|
47
|
-
sourceLinks: [
|
|
48
|
-
links("Web agent source", "src/extensions/pi-web-agent/"),
|
|
49
|
-
links("README mention", "README.md"),
|
|
50
|
-
],
|
|
51
|
-
guideRoute: "capabilities/research/web-agent",
|
|
52
|
-
piComparison: "bundled",
|
|
53
|
-
},
|
|
54
|
-
{
|
|
55
|
-
slug: "question",
|
|
56
|
-
category: "research-and-interaction",
|
|
57
|
-
en: { displayName: "Interactive questions", benefit: "TUI for single, multi-select, freeform, and image/info questions with keyboard navigation and filtering." },
|
|
58
|
-
id: { displayName: "Pertanyaan interaktif", benefit: "TUI untuk pertanyaan single/multi-select, freeform, dan image/info dengan navigasi keyboard dan filtering." },
|
|
59
|
-
sourcePaths: ["src/extensions/question/", "README.md"],
|
|
60
|
-
sourceLinks: [
|
|
61
|
-
links("Question source", "src/extensions/question/"),
|
|
62
|
-
links("README mention", "README.md"),
|
|
63
|
-
],
|
|
64
|
-
guideRoute: "capabilities/research/question",
|
|
65
|
-
piComparison: "bundled",
|
|
66
|
-
},
|
|
67
|
-
{
|
|
68
|
-
slug: "grep-app",
|
|
69
|
-
category: "research-and-interaction",
|
|
70
|
-
en: { displayName: "Public code search", benefit: "Search GitHub code through grep.app and fetch matching source without leaving the agent." },
|
|
71
|
-
id: { displayName: "Pencarian kode publik", benefit: "Cari kode GitHub melalui grep.app dan ambil source yang cocok tanpa meninggalkan agent." },
|
|
72
|
-
sourcePaths: ["src/extensions/grep-app/", "README.md"],
|
|
73
|
-
sourceLinks: [
|
|
74
|
-
links("grep.app source", "src/extensions/grep-app/"),
|
|
75
|
-
links("README mention", "README.md"),
|
|
76
|
-
],
|
|
77
|
-
guideRoute: "capabilities/research/grep-app",
|
|
78
|
-
piComparison: "bundled",
|
|
79
|
-
},
|
|
80
|
-
{
|
|
81
|
-
slug: "pi-intercom",
|
|
82
|
-
category: "continuity-and-recovery",
|
|
83
|
-
en: { displayName: "Session coordination", benefit: "Local 1:1 session messaging, ask/reply, and attachments between named Selesai sessions." },
|
|
84
|
-
id: { displayName: "Koordinasi sesi", benefit: "Pesan lokal 1:1 antar sesi Selesai yang diberi nama, ask/reply, dan lampiran." },
|
|
85
|
-
sourcePaths: ["src/extensions/pi-intercom/", "README.md"],
|
|
86
|
-
sourceLinks: [
|
|
87
|
-
links("Intercom source", "src/extensions/pi-intercom/"),
|
|
88
|
-
links("README mention", "README.md"),
|
|
89
|
-
],
|
|
90
|
-
guideRoute: "capabilities/continuity/intercom",
|
|
91
|
-
piComparison: "bundled",
|
|
92
|
-
},
|
|
93
|
-
{
|
|
94
|
-
slug: "undo",
|
|
95
|
-
category: "continuity-and-recovery",
|
|
96
|
-
en: { displayName: "Turn-level undo", benefit: "Undo tracked edits, writes, and detected mutating shell commands one turn at a time." },
|
|
97
|
-
id: { displayName: "Undo per turn", benefit: "Batalkan edit, write, dan shell command bermutasi yang terdeteksi satu turn demi satu turn." },
|
|
98
|
-
sourcePaths: ["src/extensions/undo.ts", "README.md"],
|
|
99
|
-
sourceLinks: [
|
|
100
|
-
links("Undo source", "src/extensions/undo.ts"),
|
|
101
|
-
links("README mention", "README.md"),
|
|
102
|
-
],
|
|
103
|
-
guideRoute: "capabilities/continuity/undo",
|
|
104
|
-
piComparison: "ergonomic",
|
|
105
|
-
},
|
|
106
|
-
{
|
|
107
|
-
slug: "copy-turn",
|
|
108
|
-
category: "continuity-and-recovery",
|
|
109
|
-
en: { displayName: "Copy turn", benefit: "Copy a user or assistant result from the session by hash using `/cp <hash>`." },
|
|
110
|
-
id: { displayName: "Salin turn", benefit: "Salin hasil user atau assistant dari sesi menggunakan hash dengan `/cp <hash>`." },
|
|
111
|
-
sourcePaths: ["src/extensions/copy-turn.ts", "README.md"],
|
|
112
|
-
sourceLinks: [
|
|
113
|
-
links("Copy turn source", "src/extensions/copy-turn.ts"),
|
|
114
|
-
links("README mention", "README.md"),
|
|
115
|
-
],
|
|
116
|
-
guideRoute: "capabilities/continuity/copy-turn",
|
|
117
|
-
piComparison: "ergonomic",
|
|
118
|
-
},
|
|
119
|
-
{
|
|
120
|
-
slug: "context-compaction-reminder",
|
|
121
|
-
category: "continuity-and-recovery",
|
|
122
|
-
en: { displayName: "Context reminder", benefit: "Warn when a conversation grows large and suggest `/handoff-new` to reduce context and cost." },
|
|
123
|
-
id: { displayName: "Pengingat konteks", benefit: "Peringatkan saat percakapan membesar dan sarankan `/handoff-new` untuk mengurangi konteks dan biaya." },
|
|
124
|
-
sourcePaths: ["src/extensions/context-compaction-reminder.ts", "README.md"],
|
|
125
|
-
sourceLinks: [
|
|
126
|
-
links("Reminder source", "src/extensions/context-compaction-reminder.ts"),
|
|
127
|
-
links("README mention", "README.md"),
|
|
128
|
-
],
|
|
129
|
-
guideRoute: "capabilities/continuity/context-reminder",
|
|
130
|
-
piComparison: "ergonomic",
|
|
131
|
-
},
|
|
132
|
-
{
|
|
133
|
-
slug: "handoff-new",
|
|
134
|
-
category: "continuity-and-recovery",
|
|
135
|
-
en: { displayName: "Session handoff", benefit: "Create an editable continuation prompt in a clean session to reset context and cut token spend." },
|
|
136
|
-
id: { displayName: "Handoff sesi", benefit: "Buat prompt kelanjutan yang dapat diedit dalam sesi bersih untuk mereset konteks dan menghemat token." },
|
|
137
|
-
sourcePaths: ["src/extensions/handoff-new.ts", "README.md", "src/skills/handoff/", "src/skills/selesai-handoff/"],
|
|
138
|
-
sourceLinks: [
|
|
139
|
-
links("Handoff source", "src/extensions/handoff-new.ts"),
|
|
140
|
-
links("Handoff skill", "src/skills/handoff/"),
|
|
141
|
-
links("README mention", "README.md"),
|
|
142
|
-
],
|
|
143
|
-
guideRoute: "capabilities/continuity/handoff-new",
|
|
144
|
-
piComparison: "core-differentiator",
|
|
145
|
-
},
|
|
146
|
-
{
|
|
147
|
-
slug: "pi-rewind-hook",
|
|
148
|
-
category: "continuity-and-recovery",
|
|
149
|
-
en: { displayName: "Rewind checkpoints", benefit: "Exact git-backed file checkpoints across `/fork`, `/tree`, resumed sessions, and session lineage." },
|
|
150
|
-
id: { displayName: "Checkpoint rewind", benefit: "Checkpoint file yang didukung git secara tepat di `/fork`, `/tree`, sesi yang dilanjutkan, dan silsilah sesi." },
|
|
151
|
-
sourcePaths: ["src/extensions/pi-rewind-hook/", "README.md"],
|
|
152
|
-
sourceLinks: [
|
|
153
|
-
links("Rewind source", "src/extensions/pi-rewind-hook/"),
|
|
154
|
-
links("README mention", "README.md"),
|
|
155
|
-
],
|
|
156
|
-
guideRoute: "capabilities/continuity/rewind",
|
|
157
|
-
piComparison: "ergonomic",
|
|
158
|
-
},
|
|
159
|
-
{
|
|
160
|
-
slug: "pi-powerline-footer",
|
|
161
|
-
category: "terminal-workspace",
|
|
162
|
-
en: { displayName: "Powerline footer", benefit: "Status bar, fixed-editor layout, recurring guide tour, persistent bash, stashes, themes, and Nerd Font detection." },
|
|
163
|
-
id: { displayName: "Footer powerline", benefit: "Status bar, tata letak editor tetap, tur panduan berulang, bash persisten, stash, tema, dan deteksi Nerd Font." },
|
|
164
|
-
sourcePaths: ["src/extensions/pi-powerline-footer/", "README.md", "src/core/footer-data-provider.ts"],
|
|
165
|
-
sourceLinks: [
|
|
166
|
-
links("Footer source", "src/extensions/pi-powerline-footer/"),
|
|
167
|
-
links("README mention", "README.md"),
|
|
168
|
-
],
|
|
169
|
-
guideRoute: "capabilities/workspace/powerline-footer",
|
|
170
|
-
piComparison: "bundled",
|
|
171
|
-
},
|
|
172
|
-
{
|
|
173
|
-
slug: "web-agent-onboarding",
|
|
174
|
-
category: "terminal-workspace",
|
|
175
|
-
en: { displayName: "Web agent onboarding", benefit: "First-run Brave Search onboarding for the web agent, with DuckDuckGo fallback." },
|
|
176
|
-
id: { displayName: "Onboarding web agent", benefit: "Onboarding Brave Search pertama kali untuk web agent, dengan fallback DuckDuckGo." },
|
|
177
|
-
sourcePaths: ["src/extensions/web-agent-onboarding.ts", "src/extensions/pi-web-agent/", "README.md"],
|
|
178
|
-
sourceLinks: [
|
|
179
|
-
links("Onboarding source", "src/extensions/web-agent-onboarding.ts"),
|
|
180
|
-
links("Web agent source", "src/extensions/pi-web-agent/"),
|
|
181
|
-
links("README mention", "README.md"),
|
|
182
|
-
],
|
|
183
|
-
guideRoute: "capabilities/workspace/web-agent-onboarding",
|
|
184
|
-
piComparison: "bundled",
|
|
185
|
-
},
|
|
186
|
-
{
|
|
187
|
-
slug: "tokenin-onboarding",
|
|
188
|
-
category: "terminal-workspace",
|
|
189
|
-
en: { displayName: "Token onboarding", benefit: "First-run onboarding path for provider credentials and API tokens." },
|
|
190
|
-
id: { displayName: "Onboarding token", benefit: "Jalur onboarding pertama kali untuk kredensial provider dan token API." },
|
|
191
|
-
sourcePaths: ["src/extensions/tokenin-onboarding.ts", "README.md"],
|
|
192
|
-
sourceLinks: [
|
|
193
|
-
links("Token onboarding source", "src/extensions/tokenin-onboarding.ts"),
|
|
194
|
-
links("README mention", "README.md"),
|
|
195
|
-
],
|
|
196
|
-
guideRoute: "capabilities/workspace/tokenin-onboarding",
|
|
197
|
-
piComparison: "bundled",
|
|
198
|
-
},
|
|
199
|
-
{
|
|
200
|
-
slug: "inline-skills",
|
|
201
|
-
category: "skills-and-productivity",
|
|
202
|
-
en: { displayName: "Inline skills", benefit: "Lightweight inline skill invitations without separate skill files." },
|
|
203
|
-
id: { displayName: "Skill inline", benefit: "Ajakan skill inline ringan tanpa file skill terpisah." },
|
|
204
|
-
sourcePaths: ["src/extensions/inline-skills.ts", "README.md", "src/core/skills.ts"],
|
|
205
|
-
sourceLinks: [
|
|
206
|
-
links("Inline skills source", "src/extensions/inline-skills.ts"),
|
|
207
|
-
links("Skills loader", "src/core/skills.ts"),
|
|
208
|
-
links("README mention", "README.md"),
|
|
209
|
-
],
|
|
210
|
-
guideRoute: "capabilities/skills/inline-skills",
|
|
211
|
-
piComparison: "ergonomic",
|
|
212
|
-
},
|
|
213
|
-
{
|
|
214
|
-
slug: "ponytail",
|
|
215
|
-
category: "skills-and-productivity",
|
|
216
|
-
en: { displayName: "Ponytail communication", benefit: "Minimal, compressed communication mode and review helpers invoked via `/skill:ponytail*`." },
|
|
217
|
-
id: { displayName: "Komunikasi Ponytail", benefit: "Mode komunikasi minimal dan terkompresi serta helper review, dipanggil via `/skill:ponytail*`." },
|
|
218
|
-
sourcePaths: ["src/extensions/ponytail/", "src/skills/ponytail*/", "README.md"],
|
|
219
|
-
sourceLinks: [
|
|
220
|
-
links("Ponytail extension", "src/extensions/ponytail/"),
|
|
221
|
-
links("Ponytail skills", "src/skills/ponytail/"),
|
|
222
|
-
links("README mention", "README.md"),
|
|
223
|
-
],
|
|
224
|
-
guideRoute: "capabilities/skills/ponytail",
|
|
225
|
-
piComparison: "bundled",
|
|
226
|
-
},
|
|
227
|
-
{
|
|
228
|
-
slug: "caveman",
|
|
229
|
-
category: "skills-and-productivity",
|
|
230
|
-
en: { displayName: "Caveman communication", benefit: "Abbreviated, focused response style invoked via `/skill:caveman`." },
|
|
231
|
-
id: { displayName: "Komunikasi Caveman", benefit: "Gaya responsi yang dipersingkat dan fokus, dipanggil via `/skill:caveman`." },
|
|
232
|
-
sourcePaths: ["src/extensions/caveman/", "src/skills/caveman/", "README.md"],
|
|
233
|
-
sourceLinks: [
|
|
234
|
-
links("Caveman extension", "src/extensions/caveman/"),
|
|
235
|
-
links("Caveman skill", "src/skills/caveman/"),
|
|
236
|
-
links("README mention", "README.md"),
|
|
237
|
-
],
|
|
238
|
-
guideRoute: "capabilities/skills/caveman",
|
|
239
|
-
piComparison: "bundled",
|
|
240
|
-
},
|
|
241
|
-
{
|
|
242
|
-
slug: "rtk",
|
|
243
|
-
category: "skills-and-productivity",
|
|
244
|
-
en: { displayName: "RTK integration", benefit: "Rewrite compatible shell commands to reduce noisy output and token burn when `rtk` is installed." },
|
|
245
|
-
id: { displayName: "Integrasi RTK", benefit: "Tulis ulang shell command yang kompatibel untuk mengurangi output berisik dan penggunaan token saat `rtk` terpasang." },
|
|
246
|
-
sourcePaths: ["src/extensions/rtk.ts", "README.md"],
|
|
247
|
-
sourceLinks: [
|
|
248
|
-
links("RTK source", "src/extensions/rtk.ts"),
|
|
249
|
-
links("README mention", "README.md"),
|
|
250
|
-
],
|
|
251
|
-
guideRoute: "capabilities/skills/rtk",
|
|
252
|
-
piComparison: "ergonomic",
|
|
253
|
-
},
|
|
254
|
-
];
|
|
255
|
-
export function capabilitiesByCategory(cat) {
|
|
256
|
-
return capabilities.filter((c) => c.category === cat);
|
|
257
|
-
}
|
|
258
|
-
export function getCapability(slug) {
|
|
259
|
-
return capabilities.find((c) => c.slug === slug);
|
|
260
|
-
}
|
|
261
|
-
export function categoryLabel(cat, locale) {
|
|
262
|
-
return categories.find((c) => c.id === cat)?.[locale] ?? cat;
|
|
263
|
-
}
|
|
264
|
-
export const EN_LABELS = {
|
|
265
|
-
install: "Install",
|
|
266
|
-
getStarted: "Get started",
|
|
267
|
-
whySelesai: "Why Selesai",
|
|
268
|
-
capabilities: "Capabilities",
|
|
269
|
-
evidence: "Evidence",
|
|
270
|
-
changelog: "Changelog",
|
|
271
|
-
accessibility: "Accessibility & privacy",
|
|
272
|
-
};
|
|
273
|
-
export const ID_LABELS = {
|
|
274
|
-
install: "Instal",
|
|
275
|
-
getStarted: "Mulai",
|
|
276
|
-
whySelesai: "Mengapa Selesai",
|
|
277
|
-
capabilities: "Kemampuan",
|
|
278
|
-
evidence: "Bukti dan metodologi",
|
|
279
|
-
changelog: "Changelog",
|
|
280
|
-
accessibility: "Aksesibilitas & privasi",
|
|
281
|
-
};
|
|
282
|
-
//# sourceMappingURL=capabilities.js.map
|