mstro-app 0.2.0 → 0.3.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/PRIVACY.md +126 -0
- package/README.md +24 -23
- package/bin/commands/login.js +79 -49
- package/bin/mstro.js +240 -37
- package/dist/server/cli/headless/claude-invoker.d.ts.map +1 -1
- package/dist/server/cli/headless/claude-invoker.js +133 -27
- package/dist/server/cli/headless/claude-invoker.js.map +1 -1
- package/dist/server/cli/headless/runner.d.ts.map +1 -1
- package/dist/server/cli/headless/runner.js +23 -0
- package/dist/server/cli/headless/runner.js.map +1 -1
- package/dist/server/cli/headless/stall-assessor.d.ts +3 -1
- package/dist/server/cli/headless/stall-assessor.d.ts.map +1 -1
- package/dist/server/cli/headless/stall-assessor.js +20 -1
- package/dist/server/cli/headless/stall-assessor.js.map +1 -1
- package/dist/server/cli/headless/tool-watchdog.d.ts +4 -1
- package/dist/server/cli/headless/tool-watchdog.d.ts.map +1 -1
- package/dist/server/cli/headless/tool-watchdog.js +30 -24
- package/dist/server/cli/headless/tool-watchdog.js.map +1 -1
- package/dist/server/cli/headless/types.d.ts +19 -1
- package/dist/server/cli/headless/types.d.ts.map +1 -1
- package/dist/server/cli/improvisation-session-manager.d.ts +28 -1
- package/dist/server/cli/improvisation-session-manager.d.ts.map +1 -1
- package/dist/server/cli/improvisation-session-manager.js +221 -29
- package/dist/server/cli/improvisation-session-manager.js.map +1 -1
- package/dist/server/index.js +0 -3
- package/dist/server/index.js.map +1 -1
- package/dist/server/services/analytics.d.ts.map +1 -1
- package/dist/server/services/analytics.js +13 -1
- package/dist/server/services/analytics.js.map +1 -1
- package/dist/server/services/platform.d.ts.map +1 -1
- package/dist/server/services/platform.js +13 -1
- package/dist/server/services/platform.js.map +1 -1
- package/dist/server/services/terminal/pty-manager.d.ts +2 -0
- package/dist/server/services/terminal/pty-manager.d.ts.map +1 -1
- package/dist/server/services/terminal/pty-manager.js +50 -3
- package/dist/server/services/terminal/pty-manager.js.map +1 -1
- package/dist/server/services/websocket/file-explorer-handlers.d.ts +5 -0
- package/dist/server/services/websocket/file-explorer-handlers.d.ts.map +1 -0
- package/dist/server/services/websocket/file-explorer-handlers.js +518 -0
- package/dist/server/services/websocket/file-explorer-handlers.js.map +1 -0
- package/dist/server/services/websocket/git-handlers.d.ts +36 -0
- package/dist/server/services/websocket/git-handlers.d.ts.map +1 -0
- package/dist/server/services/websocket/git-handlers.js +797 -0
- package/dist/server/services/websocket/git-handlers.js.map +1 -0
- package/dist/server/services/websocket/git-pr-handlers.d.ts +4 -0
- package/dist/server/services/websocket/git-pr-handlers.d.ts.map +1 -0
- package/dist/server/services/websocket/git-pr-handlers.js +299 -0
- package/dist/server/services/websocket/git-pr-handlers.js.map +1 -0
- package/dist/server/services/websocket/git-worktree-handlers.d.ts +4 -0
- package/dist/server/services/websocket/git-worktree-handlers.d.ts.map +1 -0
- package/dist/server/services/websocket/git-worktree-handlers.js +353 -0
- package/dist/server/services/websocket/git-worktree-handlers.js.map +1 -0
- package/dist/server/services/websocket/handler-context.d.ts +32 -0
- package/dist/server/services/websocket/handler-context.d.ts.map +1 -0
- package/dist/server/services/websocket/handler-context.js +4 -0
- package/dist/server/services/websocket/handler-context.js.map +1 -0
- package/dist/server/services/websocket/handler.d.ts +27 -359
- package/dist/server/services/websocket/handler.d.ts.map +1 -1
- package/dist/server/services/websocket/handler.js +67 -2328
- package/dist/server/services/websocket/handler.js.map +1 -1
- package/dist/server/services/websocket/index.d.ts +1 -1
- package/dist/server/services/websocket/index.d.ts.map +1 -1
- package/dist/server/services/websocket/index.js.map +1 -1
- package/dist/server/services/websocket/session-handlers.d.ts +10 -0
- package/dist/server/services/websocket/session-handlers.d.ts.map +1 -0
- package/dist/server/services/websocket/session-handlers.js +507 -0
- package/dist/server/services/websocket/session-handlers.js.map +1 -0
- package/dist/server/services/websocket/settings-handlers.d.ts +6 -0
- package/dist/server/services/websocket/settings-handlers.d.ts.map +1 -0
- package/dist/server/services/websocket/settings-handlers.js +125 -0
- package/dist/server/services/websocket/settings-handlers.js.map +1 -0
- package/dist/server/services/websocket/tab-handlers.d.ts +10 -0
- package/dist/server/services/websocket/tab-handlers.d.ts.map +1 -0
- package/dist/server/services/websocket/tab-handlers.js +131 -0
- package/dist/server/services/websocket/tab-handlers.js.map +1 -0
- package/dist/server/services/websocket/terminal-handlers.d.ts +9 -0
- package/dist/server/services/websocket/terminal-handlers.d.ts.map +1 -0
- package/dist/server/services/websocket/terminal-handlers.js +220 -0
- package/dist/server/services/websocket/terminal-handlers.js.map +1 -0
- package/dist/server/services/websocket/types.d.ts +63 -2
- package/dist/server/services/websocket/types.d.ts.map +1 -1
- package/package.json +4 -2
- package/server/README.md +176 -159
- package/server/cli/headless/claude-invoker.ts +155 -31
- package/server/cli/headless/output-utils.test.ts +225 -0
- package/server/cli/headless/runner.ts +25 -0
- package/server/cli/headless/stall-assessor.test.ts +165 -0
- package/server/cli/headless/stall-assessor.ts +25 -0
- package/server/cli/headless/tool-watchdog.test.ts +429 -0
- package/server/cli/headless/tool-watchdog.ts +33 -25
- package/server/cli/headless/types.ts +10 -1
- package/server/cli/improvisation-session-manager.ts +277 -30
- package/server/index.ts +0 -4
- package/server/mcp/README.md +59 -67
- package/server/mcp/bouncer-integration.test.ts +161 -0
- package/server/mcp/security-patterns.test.ts +258 -0
- package/server/services/analytics.ts +13 -1
- package/server/services/platform.ts +12 -1
- package/server/services/terminal/pty-manager.ts +53 -3
- package/server/services/websocket/autocomplete.test.ts +194 -0
- package/server/services/websocket/file-explorer-handlers.ts +587 -0
- package/server/services/websocket/git-handlers.ts +924 -0
- package/server/services/websocket/git-pr-handlers.ts +363 -0
- package/server/services/websocket/git-worktree-handlers.ts +403 -0
- package/server/services/websocket/handler-context.ts +44 -0
- package/server/services/websocket/handler.test.ts +1 -1
- package/server/services/websocket/handler.ts +83 -2678
- package/server/services/websocket/index.ts +1 -1
- package/server/services/websocket/session-handlers.ts +574 -0
- package/server/services/websocket/settings-handlers.ts +150 -0
- package/server/services/websocket/tab-handlers.ts +150 -0
- package/server/services/websocket/terminal-handlers.ts +277 -0
- package/server/services/websocket/types.ts +135 -0
- package/bin/release.sh +0 -110
|
@@ -55,6 +55,9 @@ export interface WebSocketMessage {
|
|
|
55
55
|
| 'deleteFile'
|
|
56
56
|
| 'renameFile'
|
|
57
57
|
| 'notifyFileOpened'
|
|
58
|
+
| 'searchFileContents'
|
|
59
|
+
| 'cancelSearch'
|
|
60
|
+
| 'findDefinition'
|
|
58
61
|
// Git message types
|
|
59
62
|
| 'gitStatus'
|
|
60
63
|
| 'gitStage'
|
|
@@ -62,12 +65,36 @@ export interface WebSocketMessage {
|
|
|
62
65
|
| 'gitCommit'
|
|
63
66
|
| 'gitCommitWithAI'
|
|
64
67
|
| 'gitPush'
|
|
68
|
+
| 'gitPull'
|
|
65
69
|
| 'gitLog'
|
|
66
70
|
| 'gitDiscoverRepos'
|
|
67
71
|
| 'gitSetDirectory'
|
|
68
72
|
| 'gitGetRemoteInfo'
|
|
69
73
|
| 'gitCreatePR'
|
|
70
74
|
| 'gitGeneratePRDescription'
|
|
75
|
+
// Branch operations
|
|
76
|
+
| 'gitListBranches'
|
|
77
|
+
| 'gitCheckout'
|
|
78
|
+
| 'gitCreateBranch'
|
|
79
|
+
| 'gitDeleteBranch'
|
|
80
|
+
// Diff operations
|
|
81
|
+
| 'gitDiff'
|
|
82
|
+
// Tag operations
|
|
83
|
+
| 'gitListTags'
|
|
84
|
+
| 'gitCreateTag'
|
|
85
|
+
| 'gitPushTag'
|
|
86
|
+
// Worktree operations
|
|
87
|
+
| 'gitWorktreeList'
|
|
88
|
+
| 'gitWorktreeCreate'
|
|
89
|
+
| 'gitWorktreeRemove'
|
|
90
|
+
| 'tabWorktreeSwitch'
|
|
91
|
+
| 'gitWorktreePush'
|
|
92
|
+
| 'gitWorktreeCreatePR'
|
|
93
|
+
// Merge operations
|
|
94
|
+
| 'gitMergePreview'
|
|
95
|
+
| 'gitWorktreeMerge'
|
|
96
|
+
| 'gitMergeAbort'
|
|
97
|
+
| 'gitMergeComplete'
|
|
71
98
|
// Session sync message types
|
|
72
99
|
| 'getActiveTabs'
|
|
73
100
|
| 'createTab'
|
|
@@ -109,6 +136,7 @@ export interface WebSocketResponse {
|
|
|
109
136
|
| 'tabInitialized'
|
|
110
137
|
| 'approvalRequired'
|
|
111
138
|
| 'toolUse'
|
|
139
|
+
| 'streamingTokens'
|
|
112
140
|
| 'notificationSummary'
|
|
113
141
|
| 'terminalOutput'
|
|
114
142
|
| 'terminalReady'
|
|
@@ -124,6 +152,10 @@ export interface WebSocketResponse {
|
|
|
124
152
|
| 'fileRenamed'
|
|
125
153
|
| 'fileOpened'
|
|
126
154
|
| 'fileContentChanged'
|
|
155
|
+
| 'contentSearchResults'
|
|
156
|
+
| 'contentSearchComplete'
|
|
157
|
+
| 'contentSearchError'
|
|
158
|
+
| 'definitionResult'
|
|
127
159
|
// Terminal sync response types
|
|
128
160
|
| 'terminalCreated'
|
|
129
161
|
| 'terminalClosed'
|
|
@@ -134,6 +166,7 @@ export interface WebSocketResponse {
|
|
|
134
166
|
| 'gitCommitted'
|
|
135
167
|
| 'gitCommitMessage'
|
|
136
168
|
| 'gitPushed'
|
|
169
|
+
| 'gitPulled'
|
|
137
170
|
| 'gitLog'
|
|
138
171
|
| 'gitError'
|
|
139
172
|
| 'gitReposDiscovered'
|
|
@@ -141,6 +174,29 @@ export interface WebSocketResponse {
|
|
|
141
174
|
| 'gitRemoteInfo'
|
|
142
175
|
| 'gitPRCreated'
|
|
143
176
|
| 'gitPRDescription'
|
|
177
|
+
// Branch response types
|
|
178
|
+
| 'gitBranchList'
|
|
179
|
+
| 'gitCheckedOut'
|
|
180
|
+
| 'gitBranchCreated'
|
|
181
|
+
| 'gitBranchDeleted'
|
|
182
|
+
// Diff response types
|
|
183
|
+
| 'gitDiffResult'
|
|
184
|
+
// Tag response types
|
|
185
|
+
| 'gitTagList'
|
|
186
|
+
| 'gitTagCreated'
|
|
187
|
+
| 'gitTagPushed'
|
|
188
|
+
// Worktree response types
|
|
189
|
+
| 'gitWorktreeListResult'
|
|
190
|
+
| 'gitWorktreeCreated'
|
|
191
|
+
| 'gitWorktreeRemoved'
|
|
192
|
+
| 'tabWorktreeSwitched'
|
|
193
|
+
| 'gitWorktreePushed'
|
|
194
|
+
| 'gitWorktreePRCreated'
|
|
195
|
+
// Merge response types
|
|
196
|
+
| 'gitMergePreviewResult'
|
|
197
|
+
| 'gitWorktreeMergeResult'
|
|
198
|
+
| 'gitMergeAborted'
|
|
199
|
+
| 'gitMergeCompleted'
|
|
144
200
|
// Session sync response types
|
|
145
201
|
| 'activeTabs'
|
|
146
202
|
| 'tabCreated'
|
|
@@ -372,3 +428,82 @@ export interface GitDirectorySetResponse {
|
|
|
372
428
|
/** Whether the directory is valid (contains .git) */
|
|
373
429
|
isValid: boolean;
|
|
374
430
|
}
|
|
431
|
+
|
|
432
|
+
// ============================================================================
|
|
433
|
+
// Branch Types
|
|
434
|
+
// ============================================================================
|
|
435
|
+
|
|
436
|
+
export interface GitBranchEntry {
|
|
437
|
+
/** Branch name, e.g. "feat/auth" or "origin/main" */
|
|
438
|
+
name: string;
|
|
439
|
+
/** Short commit hash */
|
|
440
|
+
shortHash: string;
|
|
441
|
+
/** Whether this is a remote branch */
|
|
442
|
+
isRemote: boolean;
|
|
443
|
+
/** Whether this is the currently checked out branch */
|
|
444
|
+
isCurrent: boolean;
|
|
445
|
+
/** Tracking branch, e.g. "origin/feat/auth" */
|
|
446
|
+
upstream?: string;
|
|
447
|
+
}
|
|
448
|
+
|
|
449
|
+
// ============================================================================
|
|
450
|
+
// Tag Types
|
|
451
|
+
// ============================================================================
|
|
452
|
+
|
|
453
|
+
export interface GitTagEntry {
|
|
454
|
+
/** Tag name */
|
|
455
|
+
name: string;
|
|
456
|
+
/** Short commit hash */
|
|
457
|
+
shortHash: string;
|
|
458
|
+
/** Creation date (ISO string) */
|
|
459
|
+
date: string;
|
|
460
|
+
/** Tag message (empty for lightweight tags) */
|
|
461
|
+
message: string;
|
|
462
|
+
}
|
|
463
|
+
|
|
464
|
+
// ============================================================================
|
|
465
|
+
// Worktree Types
|
|
466
|
+
// ============================================================================
|
|
467
|
+
|
|
468
|
+
export interface WorktreeInfo {
|
|
469
|
+
/** Absolute path to the worktree directory */
|
|
470
|
+
path: string;
|
|
471
|
+
/** Branch checked out in this worktree */
|
|
472
|
+
branch: string;
|
|
473
|
+
/** HEAD commit hash */
|
|
474
|
+
head: string;
|
|
475
|
+
/** Whether this is the main working tree */
|
|
476
|
+
isMain: boolean;
|
|
477
|
+
/** Whether this is a bare repository */
|
|
478
|
+
isBare: boolean;
|
|
479
|
+
/** Whether this worktree can be pruned */
|
|
480
|
+
prunable?: boolean;
|
|
481
|
+
}
|
|
482
|
+
|
|
483
|
+
// ============================================================================
|
|
484
|
+
// Merge Types
|
|
485
|
+
// ============================================================================
|
|
486
|
+
|
|
487
|
+
export interface MergePreviewResult {
|
|
488
|
+
/** Whether the merge can be done cleanly */
|
|
489
|
+
clean: boolean;
|
|
490
|
+
/** List of conflicting file paths */
|
|
491
|
+
conflicts: string[];
|
|
492
|
+
/** Diff stat summary */
|
|
493
|
+
stat: string;
|
|
494
|
+
/** List of commits to be merged */
|
|
495
|
+
commits: { hash: string; message: string }[];
|
|
496
|
+
/** Number of commits ahead */
|
|
497
|
+
ahead: number;
|
|
498
|
+
}
|
|
499
|
+
|
|
500
|
+
export interface WorktreeMergeResult {
|
|
501
|
+
/** Whether the merge succeeded */
|
|
502
|
+
success: boolean;
|
|
503
|
+
/** Merge commit hash (if successful) */
|
|
504
|
+
mergeCommit?: string;
|
|
505
|
+
/** Error message (if failed) */
|
|
506
|
+
error?: string;
|
|
507
|
+
/** List of conflicting files (if conflicts) */
|
|
508
|
+
conflictFiles?: string[];
|
|
509
|
+
}
|
package/bin/release.sh
DELETED
|
@@ -1,110 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env bash
|
|
2
|
-
set -euo pipefail
|
|
3
|
-
|
|
4
|
-
# Release script for mstro
|
|
5
|
-
# Usage: ./bin/release.sh [major|minor|patch]
|
|
6
|
-
#
|
|
7
|
-
# This script:
|
|
8
|
-
# 1. Bumps the version in package.json
|
|
9
|
-
# 2. Updates CHANGELOG.md with git commits since last tag
|
|
10
|
-
# 3. Commits the changes
|
|
11
|
-
# 4. Creates a git tag
|
|
12
|
-
# 5. Pushes to GitHub (branch + tag)
|
|
13
|
-
#
|
|
14
|
-
# After push, run `npm publish` to publish to npmjs.
|
|
15
|
-
|
|
16
|
-
BUMP_TYPE="${1:-patch}"
|
|
17
|
-
|
|
18
|
-
if [[ "$BUMP_TYPE" != "major" && "$BUMP_TYPE" != "minor" && "$BUMP_TYPE" != "patch" ]]; then
|
|
19
|
-
echo "Usage: $0 [major|minor|patch]"
|
|
20
|
-
exit 1
|
|
21
|
-
fi
|
|
22
|
-
|
|
23
|
-
# Ensure we're in the cli directory
|
|
24
|
-
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
25
|
-
CLI_DIR="$(dirname "$SCRIPT_DIR")"
|
|
26
|
-
cd "$CLI_DIR"
|
|
27
|
-
|
|
28
|
-
# Ensure working directory is clean
|
|
29
|
-
if [[ -n "$(git status --porcelain)" ]]; then
|
|
30
|
-
echo "Error: Working directory is not clean. Commit or stash changes first."
|
|
31
|
-
exit 1
|
|
32
|
-
fi
|
|
33
|
-
|
|
34
|
-
# Get current version
|
|
35
|
-
CURRENT_VERSION=$(node -e "console.log(require('./package.json').version)")
|
|
36
|
-
echo "Current version: $CURRENT_VERSION"
|
|
37
|
-
|
|
38
|
-
# Calculate new version
|
|
39
|
-
IFS='.' read -r MAJOR MINOR PATCH <<< "$CURRENT_VERSION"
|
|
40
|
-
case "$BUMP_TYPE" in
|
|
41
|
-
major) MAJOR=$((MAJOR + 1)); MINOR=0; PATCH=0 ;;
|
|
42
|
-
minor) MINOR=$((MINOR + 1)); PATCH=0 ;;
|
|
43
|
-
patch) PATCH=$((PATCH + 1)) ;;
|
|
44
|
-
esac
|
|
45
|
-
NEW_VERSION="$MAJOR.$MINOR.$PATCH"
|
|
46
|
-
echo "New version: $NEW_VERSION"
|
|
47
|
-
|
|
48
|
-
# Get the last tag (or first commit if no tags)
|
|
49
|
-
LAST_TAG=$(git describe --tags --abbrev=0 2>/dev/null || git rev-list --max-parents=0 HEAD)
|
|
50
|
-
|
|
51
|
-
# Generate changelog entry from git commits
|
|
52
|
-
CHANGELOG_ENTRY="## $NEW_VERSION ($(date +%Y-%m-%d))\n\n"
|
|
53
|
-
COMMITS=$(git log "$LAST_TAG"..HEAD --pretty=format:"- %s" --no-merges 2>/dev/null || git log --pretty=format:"- %s" --no-merges)
|
|
54
|
-
|
|
55
|
-
if [[ -z "$COMMITS" ]]; then
|
|
56
|
-
CHANGELOG_ENTRY+="- Release $NEW_VERSION\n"
|
|
57
|
-
else
|
|
58
|
-
CHANGELOG_ENTRY+="$COMMITS\n"
|
|
59
|
-
fi
|
|
60
|
-
|
|
61
|
-
# Update CHANGELOG.md
|
|
62
|
-
if [[ -f CHANGELOG.md ]]; then
|
|
63
|
-
# Insert new entry after the header
|
|
64
|
-
EXISTING=$(cat CHANGELOG.md)
|
|
65
|
-
{
|
|
66
|
-
echo "# Changelog"
|
|
67
|
-
echo ""
|
|
68
|
-
echo -e "$CHANGELOG_ENTRY"
|
|
69
|
-
# Strip the first line (# Changelog) and any leading blank lines from existing
|
|
70
|
-
echo "$EXISTING" | tail -n +2
|
|
71
|
-
} > CHANGELOG.md
|
|
72
|
-
else
|
|
73
|
-
{
|
|
74
|
-
echo "# Changelog"
|
|
75
|
-
echo ""
|
|
76
|
-
echo -e "$CHANGELOG_ENTRY"
|
|
77
|
-
} > CHANGELOG.md
|
|
78
|
-
fi
|
|
79
|
-
|
|
80
|
-
# Bump version in package.json (without npm creating a git tag)
|
|
81
|
-
npm version "$NEW_VERSION" --no-git-tag-version
|
|
82
|
-
|
|
83
|
-
echo ""
|
|
84
|
-
echo "Updated:"
|
|
85
|
-
echo " - package.json: $CURRENT_VERSION -> $NEW_VERSION"
|
|
86
|
-
echo " - CHANGELOG.md: added $NEW_VERSION entry"
|
|
87
|
-
|
|
88
|
-
# Commit and tag
|
|
89
|
-
git add package.json package-lock.json CHANGELOG.md
|
|
90
|
-
git commit -m "release: v$NEW_VERSION"
|
|
91
|
-
git tag -a "v$NEW_VERSION" -m "v$NEW_VERSION"
|
|
92
|
-
|
|
93
|
-
echo ""
|
|
94
|
-
echo "Created commit and tag v$NEW_VERSION"
|
|
95
|
-
|
|
96
|
-
# Push
|
|
97
|
-
echo ""
|
|
98
|
-
read -rp "Push to origin? (y/N) " CONFIRM
|
|
99
|
-
if [[ "$CONFIRM" =~ ^[Yy]$ ]]; then
|
|
100
|
-
git push origin HEAD
|
|
101
|
-
git push origin "v$NEW_VERSION"
|
|
102
|
-
echo ""
|
|
103
|
-
echo "Pushed to GitHub. Now run 'npm publish' to publish to npmjs."
|
|
104
|
-
else
|
|
105
|
-
echo ""
|
|
106
|
-
echo "Skipped push. Run manually:"
|
|
107
|
-
echo " git push origin HEAD"
|
|
108
|
-
echo " git push origin v$NEW_VERSION"
|
|
109
|
-
echo " npm publish"
|
|
110
|
-
fi
|