oh-my-opencode-serverlocal 0.1.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/LICENSE +21 -0
- package/README.ja-JP.md +775 -0
- package/README.ko-KR.md +796 -0
- package/README.md +792 -0
- package/README.zh-CN.md +765 -0
- package/dist/agents/council.d.ts +27 -0
- package/dist/agents/councillor.d.ts +2 -0
- package/dist/agents/designer.d.ts +2 -0
- package/dist/agents/explorer.d.ts +2 -0
- package/dist/agents/fixer.d.ts +2 -0
- package/dist/agents/index.d.ts +31 -0
- package/dist/agents/librarian.d.ts +2 -0
- package/dist/agents/observer.d.ts +2 -0
- package/dist/agents/oracle.d.ts +2 -0
- package/dist/agents/orchestrator.d.ts +28 -0
- package/dist/agents/permissions.d.ts +10 -0
- package/dist/cli/background-subagents.d.ts +13 -0
- package/dist/cli/companion.d.ts +4 -0
- package/dist/cli/config-io.d.ts +25 -0
- package/dist/cli/config-manager.d.ts +4 -0
- package/dist/cli/custom-skills-registry.d.ts +18 -0
- package/dist/cli/custom-skills.d.ts +13 -0
- package/dist/cli/doctor.d.ts +38 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.js +3565 -0
- package/dist/cli/install.d.ts +7 -0
- package/dist/cli/model-key-normalization.d.ts +1 -0
- package/dist/cli/paths.d.ts +35 -0
- package/dist/cli/providers.d.ts +145 -0
- package/dist/cli/skills.d.ts +24 -0
- package/dist/cli/system.d.ts +6 -0
- package/dist/cli/types.d.ts +47 -0
- package/dist/companion/manager.d.ts +50 -0
- package/dist/companion/updater.d.ts +36 -0
- package/dist/config/agent-mcps.d.ts +11 -0
- package/dist/config/constants.d.ts +38 -0
- package/dist/config/council-schema.d.ts +137 -0
- package/dist/config/index.d.ts +5 -0
- package/dist/config/loader.d.ts +88 -0
- package/dist/config/runtime-preset.d.ts +11 -0
- package/dist/config/schema.d.ts +1107 -0
- package/dist/config/strip-orchestrator-model.d.ts +9 -0
- package/dist/config/utils.d.ts +18 -0
- package/dist/council/council-manager.d.ts +53 -0
- package/dist/council/index.d.ts +1 -0
- package/dist/hooks/apply-patch/codec.d.ts +7 -0
- package/dist/hooks/apply-patch/errors.d.ts +25 -0
- package/dist/hooks/apply-patch/execution-context.d.ts +27 -0
- package/dist/hooks/apply-patch/index.d.ts +15 -0
- package/dist/hooks/apply-patch/matching.d.ts +26 -0
- package/dist/hooks/apply-patch/operations.d.ts +3 -0
- package/dist/hooks/apply-patch/prepared-changes.d.ts +17 -0
- package/dist/hooks/apply-patch/resolution.d.ts +19 -0
- package/dist/hooks/apply-patch/rewrite.d.ts +7 -0
- package/dist/hooks/apply-patch/test-helpers.d.ts +6 -0
- package/dist/hooks/apply-patch/types.d.ts +80 -0
- package/dist/hooks/auto-update-checker/cache.d.ts +11 -0
- package/dist/hooks/auto-update-checker/checker.d.ts +38 -0
- package/dist/hooks/auto-update-checker/constants.d.ts +12 -0
- package/dist/hooks/auto-update-checker/index.d.ts +18 -0
- package/dist/hooks/auto-update-checker/skill-sync.d.ts +67 -0
- package/dist/hooks/auto-update-checker/types.d.ts +34 -0
- package/dist/hooks/chat-headers.d.ts +16 -0
- package/dist/hooks/command-hook-utils.d.ts +5 -0
- package/dist/hooks/deepwork/index.d.ts +13 -0
- package/dist/hooks/delegate-task-retry/hook.d.ts +8 -0
- package/dist/hooks/delegate-task-retry/patterns.d.ts +11 -0
- package/dist/hooks/filter-available-skills/index.d.ts +19 -0
- package/dist/hooks/foreground-fallback/index.d.ts +122 -0
- package/dist/hooks/image-hook.d.ts +8 -0
- package/dist/hooks/index.d.ts +16 -0
- package/dist/hooks/json-error-recovery/hook.d.ts +18 -0
- package/dist/hooks/loop-command/index.d.ts +13 -0
- package/dist/hooks/phase-reminder/index.d.ts +25 -0
- package/dist/hooks/post-file-tool-nudge/index.d.ts +23 -0
- package/dist/hooks/reflect/index.d.ts +13 -0
- package/dist/hooks/session-lifecycle.d.ts +10 -0
- package/dist/hooks/task-session-manager/index.d.ts +58 -0
- package/dist/hooks/task-session-manager/pending-call-tracker.d.ts +13 -0
- package/dist/hooks/task-session-manager/task-context-tracker.d.ts +14 -0
- package/dist/hooks/types.d.ts +26 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.js +39519 -0
- package/dist/interview/dashboard-manager.d.ts +21 -0
- package/dist/interview/dashboard.d.ts +67 -0
- package/dist/interview/document.d.ts +29 -0
- package/dist/interview/helpers.d.ts +10 -0
- package/dist/interview/index.d.ts +1 -0
- package/dist/interview/manager.d.ts +21 -0
- package/dist/interview/parser.d.ts +11 -0
- package/dist/interview/prompts.d.ts +7 -0
- package/dist/interview/server.d.ts +15 -0
- package/dist/interview/service.d.ts +45 -0
- package/dist/interview/session-server.d.ts +21 -0
- package/dist/interview/types.d.ts +111 -0
- package/dist/interview/ui.d.ts +11 -0
- package/dist/loop/loop-session.d.ts +64 -0
- package/dist/mcp/context7.d.ts +6 -0
- package/dist/mcp/grep-app.d.ts +6 -0
- package/dist/mcp/index.d.ts +8 -0
- package/dist/mcp/types.d.ts +12 -0
- package/dist/mcp/websearch.d.ts +9 -0
- package/dist/multiplexer/cmux/close-policy.d.ts +20 -0
- package/dist/multiplexer/cmux/index.d.ts +102 -0
- package/dist/multiplexer/cmux/session-lifecycle.d.ts +92 -0
- package/dist/multiplexer/cmux/session-state.d.ts +45 -0
- package/dist/multiplexer/factory.d.ts +17 -0
- package/dist/multiplexer/herdr/index.d.ts +35 -0
- package/dist/multiplexer/index.d.ts +12 -0
- package/dist/multiplexer/session-manager.d.ts +69 -0
- package/dist/multiplexer/shared.d.ts +31 -0
- package/dist/multiplexer/tmux/index.d.ts +26 -0
- package/dist/multiplexer/types.d.ts +57 -0
- package/dist/multiplexer/zellij/index.d.ts +47 -0
- package/dist/tools/acp-run.d.ts +3 -0
- package/dist/tools/ast-grep/cli.d.ts +15 -0
- package/dist/tools/ast-grep/constants.d.ts +25 -0
- package/dist/tools/ast-grep/downloader.d.ts +5 -0
- package/dist/tools/ast-grep/index.d.ts +10 -0
- package/dist/tools/ast-grep/tools.d.ts +3 -0
- package/dist/tools/ast-grep/types.d.ts +30 -0
- package/dist/tools/ast-grep/utils.d.ts +4 -0
- package/dist/tools/cancel-task.d.ts +16 -0
- package/dist/tools/council.d.ts +10 -0
- package/dist/tools/index.d.ts +7 -0
- package/dist/tools/preset-manager.d.ts +26 -0
- package/dist/tools/smartfetch/binary.d.ts +3 -0
- package/dist/tools/smartfetch/cache.d.ts +6 -0
- package/dist/tools/smartfetch/constants.d.ts +12 -0
- package/dist/tools/smartfetch/index.d.ts +3 -0
- package/dist/tools/smartfetch/network.d.ts +38 -0
- package/dist/tools/smartfetch/secondary-model.d.ts +35 -0
- package/dist/tools/smartfetch/tool.d.ts +3 -0
- package/dist/tools/smartfetch/types.d.ts +122 -0
- package/dist/tools/smartfetch/utils.d.ts +20 -0
- package/dist/tui-state.d.ts +18 -0
- package/dist/tui.d.ts +13 -0
- package/dist/tui.js +1112 -0
- package/dist/utils/agent-variant.d.ts +23 -0
- package/dist/utils/background-job-board.d.ts +113 -0
- package/dist/utils/background-job-coordinator.d.ts +72 -0
- package/dist/utils/background-job-store.d.ts +46 -0
- package/dist/utils/compat.d.ts +29 -0
- package/dist/utils/councillor-models.d.ts +20 -0
- package/dist/utils/env.d.ts +3 -0
- package/dist/utils/escape-html.d.ts +1 -0
- package/dist/utils/frontmatter.d.ts +6 -0
- package/dist/utils/guards.d.ts +4 -0
- package/dist/utils/index.d.ts +10 -0
- package/dist/utils/internal-initiator.d.ts +11 -0
- package/dist/utils/logger.d.ts +6 -0
- package/dist/utils/polling.d.ts +21 -0
- package/dist/utils/session.d.ts +75 -0
- package/dist/utils/subagent-depth.d.ts +35 -0
- package/dist/utils/system-collapse.d.ts +6 -0
- package/dist/utils/task.d.ts +20 -0
- package/dist/utils/zip-extractor.d.ts +1 -0
- package/package.json +108 -0
- package/src/companion/companion-manifest.json +12 -0
- package/src/skills/clonedeps/README.md +23 -0
- package/src/skills/clonedeps/SKILL.md +240 -0
- package/src/skills/clonedeps/codemap.md +32 -0
- package/src/skills/codemap/README.md +59 -0
- package/src/skills/codemap/SKILL.md +163 -0
- package/src/skills/codemap/codemap.md +36 -0
- package/src/skills/codemap/scripts/codemap.mjs +483 -0
- package/src/skills/codemap/scripts/codemap.test.ts +129 -0
- package/src/skills/codemap.md +78 -0
- package/src/skills/deepwork/SKILL.md +122 -0
- package/src/skills/loop-engineering/SKILL.md +30 -0
- package/src/skills/oh-my-opencode-slim/SKILL.md +326 -0
- package/src/skills/reflect/SKILL.md +326 -0
- package/src/skills/simplify/README.md +19 -0
- package/src/skills/simplify/SKILL.md +138 -0
- package/src/skills/simplify/codemap.md +36 -0
- package/src/skills/verification-planning/SKILL.md +102 -0
- package/src/skills/worktrees/SKILL.md +171 -0
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { type PluginConfig } from '../config';
|
|
2
|
+
/**
|
|
3
|
+
* Normalizes an agent name by trimming whitespace and removing the optional @ prefix.
|
|
4
|
+
*
|
|
5
|
+
* @param agentName - The agent name to normalize (e.g., "@oracle" or "oracle")
|
|
6
|
+
* @returns The normalized agent name without @ prefix and trimmed of whitespace
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* normalizeAgentName("@oracle") // returns "oracle"
|
|
10
|
+
* normalizeAgentName(" explore ") // returns "explore"
|
|
11
|
+
*/
|
|
12
|
+
export declare function normalizeAgentName(agentName: string): string;
|
|
13
|
+
/**
|
|
14
|
+
* Resolve a runtime-provided agent name to an internal agent name.
|
|
15
|
+
*
|
|
16
|
+
* Supports:
|
|
17
|
+
* - internal names (e.g. "oracle")
|
|
18
|
+
* - @-prefixed names (e.g. "@oracle")
|
|
19
|
+
* - displayName aliases (e.g. "advisor" -> "oracle")
|
|
20
|
+
*/
|
|
21
|
+
export declare function resolveRuntimeAgentName(config: PluginConfig | undefined, agentName: string): string;
|
|
22
|
+
export type DisplayNameMentionRewriter = (text: string) => string;
|
|
23
|
+
export declare function createDisplayNameMentionRewriter(config: PluginConfig | undefined): DisplayNameMentionRewriter;
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
import type { BackgroundJobStore } from './background-job-store';
|
|
2
|
+
import { type TaskOutputState } from './task';
|
|
3
|
+
export interface ContextFile {
|
|
4
|
+
path: string;
|
|
5
|
+
lineCount: number;
|
|
6
|
+
lineNumbers?: number[];
|
|
7
|
+
lastReadAt: number;
|
|
8
|
+
}
|
|
9
|
+
export type BackgroundJobState = TaskOutputState | 'reconciled';
|
|
10
|
+
export interface BackgroundJobRecord {
|
|
11
|
+
taskID: string;
|
|
12
|
+
parentSessionID: string;
|
|
13
|
+
agent: string;
|
|
14
|
+
description: string;
|
|
15
|
+
objective?: string;
|
|
16
|
+
state: BackgroundJobState;
|
|
17
|
+
timedOut: boolean;
|
|
18
|
+
recoverableAfterLiveBusy: boolean;
|
|
19
|
+
statusUncertain: boolean;
|
|
20
|
+
cancellationRequested: boolean;
|
|
21
|
+
terminalUnreconciled: boolean;
|
|
22
|
+
launchedAt: number;
|
|
23
|
+
lastLaunchedAt: number;
|
|
24
|
+
updatedAt: number;
|
|
25
|
+
lastLiveBusyAt?: number;
|
|
26
|
+
completedAt?: number;
|
|
27
|
+
resultSummary?: string;
|
|
28
|
+
lastStatusError?: string;
|
|
29
|
+
alias: string;
|
|
30
|
+
lastUsedAt: number;
|
|
31
|
+
terminalState?: TaskOutputState;
|
|
32
|
+
contextFiles: ContextFile[];
|
|
33
|
+
totalErrors?: number;
|
|
34
|
+
timeoutCount?: number;
|
|
35
|
+
lastErrorAt?: number;
|
|
36
|
+
}
|
|
37
|
+
export interface BackgroundJobBoardOptions {
|
|
38
|
+
maxReusablePerAgent?: number;
|
|
39
|
+
readContextMinLines?: number;
|
|
40
|
+
readContextMaxFiles?: number;
|
|
41
|
+
}
|
|
42
|
+
export interface BackgroundJobLaunchInput {
|
|
43
|
+
taskID: string;
|
|
44
|
+
parentSessionID: string;
|
|
45
|
+
agent: string;
|
|
46
|
+
description?: string;
|
|
47
|
+
objective?: string;
|
|
48
|
+
now?: number;
|
|
49
|
+
}
|
|
50
|
+
export interface BackgroundJobStatusInput {
|
|
51
|
+
taskID: string;
|
|
52
|
+
state: TaskOutputState;
|
|
53
|
+
timedOut?: boolean;
|
|
54
|
+
statusUncertain?: boolean;
|
|
55
|
+
resultSummary?: string;
|
|
56
|
+
lastStatusError?: string;
|
|
57
|
+
now?: number;
|
|
58
|
+
}
|
|
59
|
+
type TerminalStateListener = (taskID: string) => void;
|
|
60
|
+
export declare class BackgroundJobBoard implements BackgroundJobStore {
|
|
61
|
+
private readonly jobs;
|
|
62
|
+
private readonly counters;
|
|
63
|
+
private terminalStateListeners;
|
|
64
|
+
private readonly maxReusablePerAgent;
|
|
65
|
+
private readonly readContextMinLines;
|
|
66
|
+
private readonly readContextMaxFiles;
|
|
67
|
+
constructor(options?: BackgroundJobBoardOptions);
|
|
68
|
+
addTerminalStateListener(listener: TerminalStateListener): void;
|
|
69
|
+
removeTerminalStateListener(listener: TerminalStateListener): void;
|
|
70
|
+
setTerminalStateListener(listener?: TerminalStateListener): void;
|
|
71
|
+
private notifyTerminalStateListeners;
|
|
72
|
+
registerLaunch(input: BackgroundJobLaunchInput): BackgroundJobRecord;
|
|
73
|
+
updateStatus(input: BackgroundJobStatusInput): BackgroundJobRecord | undefined;
|
|
74
|
+
updateFromStatusOutput(output: string): BackgroundJobRecord | undefined;
|
|
75
|
+
markRunningFromLiveSession(taskID: string, now?: number): BackgroundJobRecord | undefined;
|
|
76
|
+
markReconciled(taskID: string, now?: number): BackgroundJobRecord | undefined;
|
|
77
|
+
markCancelled(taskID: string, reason?: string, now?: number, options?: {
|
|
78
|
+
force?: boolean;
|
|
79
|
+
}): BackgroundJobRecord | undefined;
|
|
80
|
+
get(taskID: string): BackgroundJobRecord | undefined;
|
|
81
|
+
field<K extends keyof BackgroundJobRecord>(taskID: string, key: K): BackgroundJobRecord[K] | undefined;
|
|
82
|
+
isRunning(taskID: string): boolean;
|
|
83
|
+
isTerminalUnreconciled(taskID: string): boolean;
|
|
84
|
+
getResultSummary(taskID: string): string | undefined;
|
|
85
|
+
getLastLiveBusyAt(taskID: string): number | undefined;
|
|
86
|
+
getParentSessionID(taskID: string): string | undefined;
|
|
87
|
+
getState(taskID: string): BackgroundJobState | undefined;
|
|
88
|
+
resolve(parentSessionID: string, taskIDOrAlias: string): BackgroundJobRecord | undefined;
|
|
89
|
+
resolveReusable(parentSessionID: string, taskIDOrAlias: string, agent?: string): BackgroundJobRecord | undefined;
|
|
90
|
+
resolveRecoverable(parentSessionID: string, taskIDOrAlias: string, agent?: string): BackgroundJobRecord | undefined;
|
|
91
|
+
markUsed(parentSessionID: string, key: string, now?: number): void;
|
|
92
|
+
taskIDs(): Set<string>;
|
|
93
|
+
addContext(taskID: string, files: ContextFile[]): void;
|
|
94
|
+
list(parentSessionID?: string): BackgroundJobRecord[];
|
|
95
|
+
hasRunning(parentSessionID: string): boolean;
|
|
96
|
+
hasTerminalUnreconciled(parentSessionID: string): boolean;
|
|
97
|
+
hasConvergenceSignals(taskID: string, threshold?: number): boolean;
|
|
98
|
+
formatForPrompt(parentSessionID: string, _now?: number): string | undefined;
|
|
99
|
+
clearParent(parentSessionID: string): void;
|
|
100
|
+
drop(taskID: string): void;
|
|
101
|
+
deferIfRunning(_sessionId: string): boolean;
|
|
102
|
+
retryDeferredClose(_sessionId: string): boolean;
|
|
103
|
+
clearDeferredClose(_sessionId: string): void;
|
|
104
|
+
private trimReusable;
|
|
105
|
+
private formatReusableJob;
|
|
106
|
+
private nextAlias;
|
|
107
|
+
}
|
|
108
|
+
export declare function deriveTaskSessionLabel(input: {
|
|
109
|
+
description?: string;
|
|
110
|
+
prompt?: string;
|
|
111
|
+
agentType: string;
|
|
112
|
+
}): string;
|
|
113
|
+
export {};
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import type { BackgroundJobBoard, BackgroundJobLaunchInput, BackgroundJobRecord, BackgroundJobStatusInput, ContextFile } from './background-job-board';
|
|
2
|
+
import type { BackgroundJobStore } from './background-job-store';
|
|
3
|
+
import type { TaskOutputState } from './task';
|
|
4
|
+
type TerminalStateListener = (taskID: string) => void;
|
|
5
|
+
/**
|
|
6
|
+
* BackgroundJobCoordinator owns the lifecycle policy for background jobs.
|
|
7
|
+
* It sits between the board and its consumers, providing:
|
|
8
|
+
* - Subscription interface for terminal state notifications (replaces fire-and-forget)
|
|
9
|
+
* - Lifecycle policy: determines when jobs are terminal, when closes should be deferred
|
|
10
|
+
* - Single-writer contract: coordinator is the sole writer to the board
|
|
11
|
+
*
|
|
12
|
+
* The board's guards prevent silent overwrites. The coordinator adds:
|
|
13
|
+
* - Centralized notification with guaranteed delivery
|
|
14
|
+
* - Re-checks board state before notifying (handles races)
|
|
15
|
+
*/
|
|
16
|
+
export declare class BackgroundJobCoordinator implements BackgroundJobStore {
|
|
17
|
+
private readonly board;
|
|
18
|
+
private terminalStateListeners;
|
|
19
|
+
private readonly deferredIdleCloses;
|
|
20
|
+
constructor(board: BackgroundJobBoard);
|
|
21
|
+
addTerminalStateListener(listener: TerminalStateListener): void;
|
|
22
|
+
removeTerminalStateListener(listener: TerminalStateListener): void;
|
|
23
|
+
/**
|
|
24
|
+
* Handle terminal state from board. Re-checks board state to handle races.
|
|
25
|
+
* This is the centralized lifecycle policy.
|
|
26
|
+
*/
|
|
27
|
+
private handleTerminalState;
|
|
28
|
+
/**
|
|
29
|
+
* Evaluate close policy. Returns true if session should close now.
|
|
30
|
+
* Mutates deferred state: adds to deferred set if running, removes if not.
|
|
31
|
+
*/
|
|
32
|
+
deferIfRunning(sessionId: string): boolean;
|
|
33
|
+
/**
|
|
34
|
+
* Retry closing a deferred session. Called when a background job completes.
|
|
35
|
+
* Returns true if the session should now close.
|
|
36
|
+
*/
|
|
37
|
+
retryDeferredClose(sessionId: string): boolean;
|
|
38
|
+
/**
|
|
39
|
+
* Clear deferred close state for a session being deleted.
|
|
40
|
+
*/
|
|
41
|
+
clearDeferredClose(sessionId: string): void;
|
|
42
|
+
registerLaunch(input: BackgroundJobLaunchInput): BackgroundJobRecord;
|
|
43
|
+
updateStatus(input: BackgroundJobStatusInput): BackgroundJobRecord | undefined;
|
|
44
|
+
updateFromStatusOutput(output: string): BackgroundJobRecord | undefined;
|
|
45
|
+
markRunningFromLiveSession(taskID: string, now?: number): BackgroundJobRecord | undefined;
|
|
46
|
+
markReconciled(taskID: string, now?: number): BackgroundJobRecord | undefined;
|
|
47
|
+
markCancelled(taskID: string, reason?: string, now?: number, options?: {
|
|
48
|
+
force?: boolean;
|
|
49
|
+
}): BackgroundJobRecord | undefined;
|
|
50
|
+
get(taskID: string): BackgroundJobRecord | undefined;
|
|
51
|
+
field<K extends keyof BackgroundJobRecord>(taskID: string, key: K): BackgroundJobRecord[K] | undefined;
|
|
52
|
+
isRunning(taskID: string): boolean;
|
|
53
|
+
isTerminalUnreconciled(taskID: string): boolean;
|
|
54
|
+
getResultSummary(taskID: string): string | undefined;
|
|
55
|
+
getLastLiveBusyAt(taskID: string): number | undefined;
|
|
56
|
+
getParentSessionID(taskID: string): string | undefined;
|
|
57
|
+
getState(taskID: string): TaskOutputState | 'reconciled' | undefined;
|
|
58
|
+
resolve(parentSessionID: string, taskIDOrAlias: string): BackgroundJobRecord | undefined;
|
|
59
|
+
resolveReusable(parentSessionID: string, taskIDOrAlias: string, agent?: string): BackgroundJobRecord | undefined;
|
|
60
|
+
resolveRecoverable(parentSessionID: string, taskIDOrAlias: string, agent?: string): BackgroundJobRecord | undefined;
|
|
61
|
+
markUsed(parentSessionID: string, key: string, now?: number): void;
|
|
62
|
+
taskIDs(): Set<string>;
|
|
63
|
+
addContext(taskID: string, files: ContextFile[]): void;
|
|
64
|
+
list(parentSessionID?: string): BackgroundJobRecord[];
|
|
65
|
+
hasRunning(parentSessionID: string): boolean;
|
|
66
|
+
hasTerminalUnreconciled(parentSessionID: string): boolean;
|
|
67
|
+
hasConvergenceSignals(taskID: string, threshold?: number): boolean;
|
|
68
|
+
formatForPrompt(parentSessionID: string, now?: number): string | undefined;
|
|
69
|
+
clearParent(parentSessionID: string): void;
|
|
70
|
+
drop(taskID: string): void;
|
|
71
|
+
}
|
|
72
|
+
export {};
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import type { BackgroundJobLaunchInput, BackgroundJobRecord, BackgroundJobStatusInput, ContextFile } from './background-job-board';
|
|
2
|
+
import type { TaskOutputState } from './task';
|
|
3
|
+
/**
|
|
4
|
+
* Unified interface for background job operations.
|
|
5
|
+
* Both BackgroundJobBoard and BackgroundJobCoordinator satisfy this.
|
|
6
|
+
*
|
|
7
|
+
* ponytail: single interface, both board and coordinator implement it.
|
|
8
|
+
*/
|
|
9
|
+
export interface BackgroundJobStore {
|
|
10
|
+
registerLaunch(input: BackgroundJobLaunchInput): BackgroundJobRecord;
|
|
11
|
+
updateStatus(input: BackgroundJobStatusInput): BackgroundJobRecord | undefined;
|
|
12
|
+
updateFromStatusOutput(output: string): BackgroundJobRecord | undefined;
|
|
13
|
+
markRunningFromLiveSession(taskID: string, now?: number): BackgroundJobRecord | undefined;
|
|
14
|
+
markReconciled(taskID: string, now?: number): BackgroundJobRecord | undefined;
|
|
15
|
+
markCancelled(taskID: string, reason?: string, now?: number, options?: {
|
|
16
|
+
force?: boolean;
|
|
17
|
+
}): BackgroundJobRecord | undefined;
|
|
18
|
+
clearParent(parentSessionID: string): void;
|
|
19
|
+
drop(taskID: string): void;
|
|
20
|
+
addContext(taskID: string, files: ContextFile[]): void;
|
|
21
|
+
markUsed(parentSessionID: string, key: string, now?: number): void;
|
|
22
|
+
get(taskID: string): BackgroundJobRecord | undefined;
|
|
23
|
+
field<K extends keyof BackgroundJobRecord>(taskID: string, key: K): BackgroundJobRecord[K] | undefined;
|
|
24
|
+
isRunning(taskID: string): boolean;
|
|
25
|
+
isTerminalUnreconciled(taskID: string): boolean;
|
|
26
|
+
getResultSummary(taskID: string): string | undefined;
|
|
27
|
+
getLastLiveBusyAt(taskID: string): number | undefined;
|
|
28
|
+
getParentSessionID(taskID: string): string | undefined;
|
|
29
|
+
getState(taskID: string): TaskOutputState | 'reconciled' | undefined;
|
|
30
|
+
resolve(parentSessionID: string, taskIDOrAlias: string): BackgroundJobRecord | undefined;
|
|
31
|
+
resolveReusable(parentSessionID: string, taskIDOrAlias: string, agent?: string): BackgroundJobRecord | undefined;
|
|
32
|
+
resolveRecoverable(parentSessionID: string, taskIDOrAlias: string, agent?: string): BackgroundJobRecord | undefined;
|
|
33
|
+
taskIDs(): Set<string>;
|
|
34
|
+
list(parentSessionID?: string): BackgroundJobRecord[];
|
|
35
|
+
hasRunning(parentSessionID: string): boolean;
|
|
36
|
+
hasTerminalUnreconciled(parentSessionID: string): boolean;
|
|
37
|
+
hasConvergenceSignals(taskID: string, threshold?: number): boolean;
|
|
38
|
+
formatForPrompt(parentSessionID: string, now?: number): string | undefined;
|
|
39
|
+
/** Evaluate close policy. Returns true if session should close now.
|
|
40
|
+
* Mutates deferred state: adds to deferred set if running, removes if not. */
|
|
41
|
+
deferIfRunning(sessionId: string): boolean;
|
|
42
|
+
/** Retry closing a deferred session. Returns true if session should now close. */
|
|
43
|
+
retryDeferredClose(sessionId: string): boolean;
|
|
44
|
+
/** Clear deferred close state for a session being deleted. */
|
|
45
|
+
clearDeferredClose(sessionId: string): void;
|
|
46
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { ChildProcess } from 'node:child_process';
|
|
2
|
+
export interface CrossSpawnResult {
|
|
3
|
+
proc: ChildProcess;
|
|
4
|
+
/** Collects all stdout into a string */
|
|
5
|
+
stdout: () => Promise<string>;
|
|
6
|
+
/** Collects all stderr into a string */
|
|
7
|
+
stderr: () => Promise<string>;
|
|
8
|
+
/** Resolves when process exits with exit code */
|
|
9
|
+
exited: Promise<number>;
|
|
10
|
+
/** Kill the process */
|
|
11
|
+
kill: (signal?: NodeJS.Signals | number) => boolean;
|
|
12
|
+
/** Current exit code or null if running */
|
|
13
|
+
get exitCode(): number | null;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Cross-runtime spawn that works in both Bun and Node.js.
|
|
17
|
+
* API mimics Bun.spawn but uses node:child_process internally.
|
|
18
|
+
*/
|
|
19
|
+
export declare function crossSpawn(command: string[], options?: {
|
|
20
|
+
stdout?: 'pipe' | 'inherit' | 'ignore';
|
|
21
|
+
stderr?: 'pipe' | 'inherit' | 'ignore';
|
|
22
|
+
stdin?: 'pipe' | 'inherit' | 'ignore';
|
|
23
|
+
cwd?: string;
|
|
24
|
+
env?: Record<string, string | undefined>;
|
|
25
|
+
}): CrossSpawnResult;
|
|
26
|
+
/**
|
|
27
|
+
* Cross-runtime file write that works in both Bun and Node.js.
|
|
28
|
+
*/
|
|
29
|
+
export declare function crossWrite(path: string, data: ArrayBuffer | Buffer | string): Promise<void>;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pure helpers for councillor model fallback chains.
|
|
3
|
+
*
|
|
4
|
+
* Kept free of any schema/validation library import so that runtime consumers
|
|
5
|
+
* (e.g. `CouncilManager`) can resolve a councillor's ordered model chain
|
|
6
|
+
* without pulling in zod or the config schema module.
|
|
7
|
+
*/
|
|
8
|
+
/** A single model in a councillor fallback chain, with optional variant. */
|
|
9
|
+
export type CouncillorModelEntry = {
|
|
10
|
+
id: string;
|
|
11
|
+
variant?: string;
|
|
12
|
+
};
|
|
13
|
+
/**
|
|
14
|
+
* Flatten a councillor model config into an ordered list of model entries.
|
|
15
|
+
*
|
|
16
|
+
* Accepts either a single "provider/model" string or an ordered fallback
|
|
17
|
+
* chain (array of strings and/or `{ id, variant }` entries). Entries that
|
|
18
|
+
* don't carry their own variant fall back to the shared `fallbackVariant`.
|
|
19
|
+
*/
|
|
20
|
+
export declare function normalizeCouncillorModels(model: string | Array<string | CouncillorModelEntry>, fallbackVariant?: string): CouncillorModelEntry[];
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function escapeHtml(value: string): string;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export * from './agent-variant';
|
|
2
|
+
export * from './background-job-board';
|
|
3
|
+
export * from './background-job-coordinator';
|
|
4
|
+
export * from './background-job-store';
|
|
5
|
+
export * from './internal-initiator';
|
|
6
|
+
export { initLogger, log } from './logger';
|
|
7
|
+
export * from './polling';
|
|
8
|
+
export * from './session';
|
|
9
|
+
export * from './task';
|
|
10
|
+
export { extractZip } from './zip-extractor';
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export declare const SLIM_INTERNAL_INITIATOR_MARKER = "<!-- SLIM_INTERNAL_INITIATOR -->";
|
|
2
|
+
export declare const INTERNAL_INITIATOR_METADATA_KEY = "oh-my-opencode-slim.internalInitiator";
|
|
3
|
+
export declare function createInternalAgentTextPart(text: string): {
|
|
4
|
+
type: 'text';
|
|
5
|
+
text: string;
|
|
6
|
+
synthetic: true;
|
|
7
|
+
metadata: {
|
|
8
|
+
'oh-my-opencode-slim.internalInitiator': true;
|
|
9
|
+
};
|
|
10
|
+
};
|
|
11
|
+
export declare function isInternalInitiatorPart(part: unknown): boolean;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export declare function initLogger(sessionId: string): void;
|
|
2
|
+
/** @internal Reset logger state for testing */
|
|
3
|
+
export declare function resetLogger(): void;
|
|
4
|
+
/** @internal Wait for queued log writes in tests. */
|
|
5
|
+
export declare function flushLoggerForTesting(): Promise<void>;
|
|
6
|
+
export declare function log(message: string, data?: unknown): void;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export interface PollOptions {
|
|
2
|
+
pollInterval?: number;
|
|
3
|
+
maxPollTime?: number;
|
|
4
|
+
stableThreshold?: number;
|
|
5
|
+
signal?: AbortSignal;
|
|
6
|
+
}
|
|
7
|
+
export interface PollResult<T> {
|
|
8
|
+
success: boolean;
|
|
9
|
+
data?: T;
|
|
10
|
+
timedOut?: boolean;
|
|
11
|
+
aborted?: boolean;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Generic polling utility that waits for a condition to be met.
|
|
15
|
+
* Returns when the condition is satisfied or timeout/abort occurs.
|
|
16
|
+
*/
|
|
17
|
+
export declare function pollUntilStable<T>(fetchFn: () => Promise<T>, isStable: (current: T, previous: T | null, stableCount: number) => boolean, opts?: PollOptions): Promise<PollResult<T>>;
|
|
18
|
+
/**
|
|
19
|
+
* Simple delay utility
|
|
20
|
+
*/
|
|
21
|
+
export declare function delay(ms: number): Promise<void>;
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared session utilities for council and background managers.
|
|
3
|
+
*/
|
|
4
|
+
import type { PluginInput } from '@opencode-ai/plugin';
|
|
5
|
+
type OpencodeClient = PluginInput['client'];
|
|
6
|
+
export declare const SESSION_ABORT_TIMEOUT_MS = 1000;
|
|
7
|
+
export declare class OperationTimeoutError extends Error {
|
|
8
|
+
constructor(message: string);
|
|
9
|
+
}
|
|
10
|
+
export declare function withTimeout<T>(operation: Promise<T>, timeoutMs: number, message: string): Promise<T>;
|
|
11
|
+
export declare function abortSessionWithTimeout(client: OpencodeClient, sessionId: string, timeoutMs?: number): Promise<void>;
|
|
12
|
+
/**
|
|
13
|
+
* Extract the short model label from a "provider/model" string.
|
|
14
|
+
* E.g. "openai/gpt-5.6-luna" → "gpt-5.6-luna"
|
|
15
|
+
*/
|
|
16
|
+
export declare function shortModelLabel(model: string): string;
|
|
17
|
+
export type PromptBody = {
|
|
18
|
+
messageID?: string;
|
|
19
|
+
model?: {
|
|
20
|
+
providerID: string;
|
|
21
|
+
modelID: string;
|
|
22
|
+
};
|
|
23
|
+
agent?: string;
|
|
24
|
+
noReply?: boolean;
|
|
25
|
+
system?: string;
|
|
26
|
+
tools?: {
|
|
27
|
+
[key: string]: boolean;
|
|
28
|
+
};
|
|
29
|
+
parts: Array<{
|
|
30
|
+
type: 'text';
|
|
31
|
+
text: string;
|
|
32
|
+
}>;
|
|
33
|
+
variant?: string;
|
|
34
|
+
};
|
|
35
|
+
/**
|
|
36
|
+
* Parse a model reference string into provider and model IDs.
|
|
37
|
+
* @param model - Model string in format "provider/model"
|
|
38
|
+
* @returns Object with providerID and modelID, or null if invalid
|
|
39
|
+
*/
|
|
40
|
+
export declare function parseModelReference(model: string): {
|
|
41
|
+
providerID: string;
|
|
42
|
+
modelID: string;
|
|
43
|
+
} | null;
|
|
44
|
+
/**
|
|
45
|
+
* Send a prompt to a session with optional timeout.
|
|
46
|
+
* If timeout is exceeded, the session is aborted and an error is thrown.
|
|
47
|
+
* @param client - OpenCode client instance
|
|
48
|
+
* @param args - Arguments for session.prompt()
|
|
49
|
+
* @param timeoutMs - Timeout in milliseconds (0 = no timeout)
|
|
50
|
+
* @throws Error if timeout is exceeded
|
|
51
|
+
*/
|
|
52
|
+
export declare function promptWithTimeout(client: OpencodeClient, args: Parameters<OpencodeClient['session']['prompt']>[0], timeoutMs: number, signal?: AbortSignal): Promise<void>;
|
|
53
|
+
/**
|
|
54
|
+
* Result of extracting session content.
|
|
55
|
+
* `empty` is true when the assistant produced zero text content -
|
|
56
|
+
* the provider returned an empty response (e.g. rate-limited silently).
|
|
57
|
+
*/
|
|
58
|
+
export interface SessionExtractionResult {
|
|
59
|
+
text: string;
|
|
60
|
+
empty: boolean;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Extract the result text from a session.
|
|
64
|
+
* Collects all assistant messages and concatenates their text parts.
|
|
65
|
+
* @param client - OpenCode client instance
|
|
66
|
+
* @param sessionId - Session ID to extract from
|
|
67
|
+
* @param options - Optional: `includeReasoning` (default true) controls whether
|
|
68
|
+
* reasoning/chain-of-thought parts are included.
|
|
69
|
+
* @returns Object with extracted text and an `empty` flag for zero-content detection
|
|
70
|
+
*/
|
|
71
|
+
export declare function extractSessionResult(client: OpencodeClient, sessionId: string, options?: {
|
|
72
|
+
directory?: string;
|
|
73
|
+
includeReasoning?: boolean;
|
|
74
|
+
}): Promise<SessionExtractionResult>;
|
|
75
|
+
export {};
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tracks subagent spawn depth to prevent excessive nesting.
|
|
3
|
+
*
|
|
4
|
+
* Depth 0 = root session (user's main conversation)
|
|
5
|
+
* Depth 1 = agent spawned by root (e.g., explorer, council)
|
|
6
|
+
* Depth 2 = agent spawned by depth-1 agent (e.g., councillor spawned by council)
|
|
7
|
+
* Depth 3 = agent spawned by depth-2 agent (max depth by default)
|
|
8
|
+
*
|
|
9
|
+
* When max depth is exceeded, the spawn is blocked.
|
|
10
|
+
*/
|
|
11
|
+
export declare class SubagentDepthTracker {
|
|
12
|
+
private depthBySession;
|
|
13
|
+
private readonly _maxDepth;
|
|
14
|
+
constructor(maxDepth?: number);
|
|
15
|
+
/** Maximum allowed depth. */
|
|
16
|
+
get maxDepth(): number;
|
|
17
|
+
/**
|
|
18
|
+
* Get the current depth of a session.
|
|
19
|
+
* Root sessions (not tracked) have depth 0.
|
|
20
|
+
*/
|
|
21
|
+
getDepth(sessionId: string): number;
|
|
22
|
+
/**
|
|
23
|
+
* Register a child session and check if the spawn is allowed.
|
|
24
|
+
* @returns true if allowed, false if max depth exceeded
|
|
25
|
+
*/
|
|
26
|
+
registerChild(parentSessionId: string, childSessionId: string): boolean;
|
|
27
|
+
/**
|
|
28
|
+
* Clean up session tracking when a session is deleted.
|
|
29
|
+
*/
|
|
30
|
+
cleanup(sessionId: string): void;
|
|
31
|
+
/**
|
|
32
|
+
* Clean up all tracking data.
|
|
33
|
+
*/
|
|
34
|
+
cleanupAll(): void;
|
|
35
|
+
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Collapse a system message array into a single element by joining all
|
|
3
|
+
* entries with double-newline separators. Mutates the array in-place so
|
|
4
|
+
* that callers holding a reference to the original array see the change.
|
|
5
|
+
*/
|
|
6
|
+
export declare function collapseSystemInPlace(system: string[]): void;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Parse Task tool output to recover a session/task ID for resumption.
|
|
3
|
+
*/
|
|
4
|
+
export type TaskOutputState = 'running' | 'completed' | 'error' | 'cancelled';
|
|
5
|
+
export interface TaskLaunchOutput {
|
|
6
|
+
taskID: string;
|
|
7
|
+
state: 'running';
|
|
8
|
+
result?: string;
|
|
9
|
+
}
|
|
10
|
+
export interface TaskStatusOutput {
|
|
11
|
+
taskID: string;
|
|
12
|
+
state: TaskOutputState;
|
|
13
|
+
timedOut: boolean;
|
|
14
|
+
result?: string;
|
|
15
|
+
}
|
|
16
|
+
export declare function parseTaskIdFromTaskOutput(output: string): string | undefined;
|
|
17
|
+
export declare function parseTaskLaunchOutput(output: string): TaskLaunchOutput | undefined;
|
|
18
|
+
export declare function parseTaskStatusOutput(output: string): TaskStatusOutput | undefined;
|
|
19
|
+
export declare function parseTaskStateFromOutput(output: string): TaskOutputState | undefined;
|
|
20
|
+
export declare function parseTaskResultFromOutput(output: string): string | undefined;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function extractZip(archivePath: string, destDir: string): Promise<void>;
|
package/package.json
ADDED
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "oh-my-opencode-serverlocal",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Custom serverlocal fork of oh-my-opencode-slim — fully owned, custom prompts + commands, dist synced via opencode-dotfiles",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"types": "dist/index.d.ts",
|
|
7
|
+
"exports": {
|
|
8
|
+
".": {
|
|
9
|
+
"import": "./dist/index.js",
|
|
10
|
+
"types": "./dist/index.d.ts"
|
|
11
|
+
},
|
|
12
|
+
"./tui": {
|
|
13
|
+
"import": "./dist/tui.js",
|
|
14
|
+
"types": "./dist/tui.d.ts"
|
|
15
|
+
}
|
|
16
|
+
},
|
|
17
|
+
"bin": {
|
|
18
|
+
"oh-my-opencode-serverlocal": "./dist/cli/index.js"
|
|
19
|
+
},
|
|
20
|
+
"type": "module",
|
|
21
|
+
"license": "MIT",
|
|
22
|
+
"keywords": [
|
|
23
|
+
"opencode",
|
|
24
|
+
"opencode-plugin",
|
|
25
|
+
"ai",
|
|
26
|
+
"agents",
|
|
27
|
+
"orchestration",
|
|
28
|
+
"serverlocal",
|
|
29
|
+
"fork",
|
|
30
|
+
"claude",
|
|
31
|
+
"gpt",
|
|
32
|
+
"gemini"
|
|
33
|
+
],
|
|
34
|
+
"repository": {
|
|
35
|
+
"type": "git",
|
|
36
|
+
"url": "https://github.com/Darthph0enix7/oh-my-opencode-serverlocal"
|
|
37
|
+
},
|
|
38
|
+
"bugs": {
|
|
39
|
+
"url": "https://github.com/Darthph0enix7/oh-my-opencode-serverlocal/issues"
|
|
40
|
+
},
|
|
41
|
+
"homepage": "https://github.com/Darthph0enix7/oh-my-opencode-serverlocal#readme",
|
|
42
|
+
"files": [
|
|
43
|
+
"dist",
|
|
44
|
+
"src/companion/companion-manifest.json",
|
|
45
|
+
"src/skills",
|
|
46
|
+
"oh-my-opencode-slim.schema.json",
|
|
47
|
+
"README.md",
|
|
48
|
+
"README.zh-CN.md",
|
|
49
|
+
"README.ja-JP.md",
|
|
50
|
+
"README.ko-KR.md",
|
|
51
|
+
"LICENSE"
|
|
52
|
+
],
|
|
53
|
+
"scripts": {
|
|
54
|
+
"clean:dist": "bun -e \"import { rmSync } from 'node:fs'; rmSync('dist', { recursive: true, force: true })\"",
|
|
55
|
+
"build:plugin": "bun build src/index.ts src/tui.ts --outdir dist --target node --format esm --external @ast-grep/napi --external @opencode-ai/plugin --external @opencode-ai/plugin/* --external @opencode-ai/sdk --external @opencode-ai/sdk/* --external @opentui/core --external @opentui/solid --external jsdom --external zod",
|
|
56
|
+
"build:cli": "bun build src/cli/index.ts --outdir dist/cli --target node --format esm --external @ast-grep/napi --external @opencode-ai/plugin --external @opencode-ai/plugin/* --external @opencode-ai/sdk --external @opencode-ai/sdk/* --external jsdom --external zod",
|
|
57
|
+
"build": "bun run clean:dist && bun run build:plugin && bun run build:cli && tsc --emitDeclarationOnly && bun run generate-schema",
|
|
58
|
+
"prepare": "bun run build",
|
|
59
|
+
"contributors:add": "all-contributors add",
|
|
60
|
+
"contributors:check": "all-contributors check",
|
|
61
|
+
"contributors:generate": "all-contributors generate",
|
|
62
|
+
"generate-schema": "bun run scripts/generate-schema.ts",
|
|
63
|
+
"verify:release": "bun run scripts/verify-release-artifact.ts",
|
|
64
|
+
"verify:host-smoke": "bun run scripts/verify-opencode-host-smoke.ts",
|
|
65
|
+
"typecheck": "tsc --noEmit",
|
|
66
|
+
"test": "bun test",
|
|
67
|
+
"lint": "biome lint .",
|
|
68
|
+
"format": "biome format . --write",
|
|
69
|
+
"check": "biome check --write .",
|
|
70
|
+
"check:ci": "biome check .",
|
|
71
|
+
"dev": "bun run build && opencode",
|
|
72
|
+
"prepublishOnly": "bun run build",
|
|
73
|
+
"release:patch": "npm version patch && git push --follow-tags && npm publish",
|
|
74
|
+
"release:minor": "npm version minor && git push --follow-tags && npm publish",
|
|
75
|
+
"release:major": "npm version major && git push --follow-tags && npm publish",
|
|
76
|
+
"release:beta": "npm version premajor --preid beta && git push --follow-tags && npm publish --tag beta",
|
|
77
|
+
"release:beta:next": "npm version prerelease --preid beta && git push --follow-tags && npm publish --tag beta"
|
|
78
|
+
},
|
|
79
|
+
"dependencies": {
|
|
80
|
+
"@ast-grep/cli": "^0.42.1",
|
|
81
|
+
"@modelcontextprotocol/sdk": "^1.29.0",
|
|
82
|
+
"@mozilla/readability": "^0.6.0",
|
|
83
|
+
"@opencode-ai/plugin": "^1.3.17",
|
|
84
|
+
"@opencode-ai/sdk": "^1.3.17",
|
|
85
|
+
"jsdom": "^26.1.0",
|
|
86
|
+
"lru-cache": "^11.3.3",
|
|
87
|
+
"turndown": "^7.2.4"
|
|
88
|
+
},
|
|
89
|
+
"optionalDependencies": {
|
|
90
|
+
"@opentui/solid": "^0.1.97"
|
|
91
|
+
},
|
|
92
|
+
"devDependencies": {
|
|
93
|
+
"@biomejs/biome": "2.4.11",
|
|
94
|
+
"@types/jsdom": "^21.1.7",
|
|
95
|
+
"@types/node": "^24.6.1",
|
|
96
|
+
"@types/turndown": "^5.0.6",
|
|
97
|
+
"all-contributors-cli": "^6.26.1",
|
|
98
|
+
"bun-types": "1.3.12",
|
|
99
|
+
"typescript": "^5.9.3",
|
|
100
|
+
"zod": "^4.3.6"
|
|
101
|
+
},
|
|
102
|
+
"peerDependencies": {
|
|
103
|
+
"zod": "^4.0.0"
|
|
104
|
+
},
|
|
105
|
+
"trustedDependencies": [
|
|
106
|
+
"@ast-grep/cli"
|
|
107
|
+
]
|
|
108
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": "0.1.3",
|
|
3
|
+
"tag": "companion-v0.1.3",
|
|
4
|
+
"repo": "alvinunreal/oh-my-opencode-slim",
|
|
5
|
+
"checksums": {
|
|
6
|
+
"oh-my-opencode-slim-companion-v0.1.3-aarch64-apple-darwin.tar.gz": "b4885f9b1900c02376e5f8f5ae6f3b8a89d26f7514b03f836d7e3d618164a0ed",
|
|
7
|
+
"oh-my-opencode-slim-companion-v0.1.3-aarch64-unknown-linux-gnu.tar.gz": "ed7cffc583e1eaa78c9bea702e6b6aa3bbc5bb4d881713fb2050237ba6b7aca5",
|
|
8
|
+
"oh-my-opencode-slim-companion-v0.1.3-x86_64-apple-darwin.tar.gz": "98d8ea7c7bc4415b18e0d4c524adb4eb9a84c872919840fdc021f0f50c61f808",
|
|
9
|
+
"oh-my-opencode-slim-companion-v0.1.3-x86_64-pc-windows-msvc.zip": "9316a49bf01f3b4fb1ce2d62edfc46094e73bb153d6ce023fb7df085afcf77bd",
|
|
10
|
+
"oh-my-opencode-slim-companion-v0.1.3-x86_64-unknown-linux-gnu.tar.gz": "33f5fd4b6c80155a019391e5efb13904ca9531ba8dd8c6cba30a161f1b07b764"
|
|
11
|
+
}
|
|
12
|
+
}
|