phewsh 0.15.75 → 0.15.77
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +18 -1
- package/bin/phewsh.js +1 -1
- package/commands/feedback.js +41 -1
- package/commands/status.js +1 -1
- package/lib/shims.js +1 -1
- package/lib/slash-commands.js +1 -1
- package/package.json +11 -3
package/README.md
CHANGED
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
# phewsh
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
**One mission. Many AI tools. No lost context.**
|
|
4
|
+
|
|
5
|
+
PHEWSH is the continuity layer for AI-assisted work: it turns what you're
|
|
6
|
+
building into durable project intent (`.intent/`) and carries it across
|
|
7
|
+
Claude Code, Codex, Cursor, Gemini, your terminal, and your team — so the
|
|
8
|
+
next AI knows what the last one learned.
|
|
4
9
|
|
|
5
10
|
## Install
|
|
6
11
|
|
|
@@ -204,6 +209,18 @@ the same canonical `.intent/` source.
|
|
|
204
209
|
|
|
205
210
|
[phewsh.com/intent](https://phewsh.com/intent)
|
|
206
211
|
|
|
212
|
+
## Feedback
|
|
213
|
+
|
|
214
|
+
Something missing, confusing, or broken?
|
|
215
|
+
|
|
216
|
+
```bash
|
|
217
|
+
phewsh feedback "what you expected vs what happened"
|
|
218
|
+
```
|
|
219
|
+
|
|
220
|
+
That opens a prefilled public issue on this repo (only your words plus
|
|
221
|
+
version/OS/node — documented in [SECURITY.md](./SECURITY.md)). Private
|
|
222
|
+
channel: hello@phewsh.com.
|
|
223
|
+
|
|
207
224
|
## License
|
|
208
225
|
|
|
209
226
|
MIT
|
package/bin/phewsh.js
CHANGED
|
@@ -172,7 +172,7 @@ function showHelp() {
|
|
|
172
172
|
console.log(` ${cyan('bypass')} ${g('Went around phewsh? Record why — 10 seconds, no guilt')}`);
|
|
173
173
|
console.log('');
|
|
174
174
|
console.log(` ${b(w('configure'))}`);
|
|
175
|
-
console.log(` ${cyan('feedback')} ${g('Tell us
|
|
175
|
+
console.log(` ${cyan('feedback')} ${g('Tell us what you need — prefilled GitHub issue; `feedback list` shows the queue')}`);
|
|
176
176
|
console.log(` ${cyan('login')} ${g('Identity + API key + cloud sync')}`);
|
|
177
177
|
console.log(` ${cyan('link')} ${g('Link local .intent/ to cloud project')}`);
|
|
178
178
|
console.log(` ${cyan('update')} ${g('Update phewsh — or `phewsh update auto on` to stay current automatically')}`);
|
package/commands/feedback.js
CHANGED
|
@@ -40,8 +40,47 @@ function openBrowser(url) {
|
|
|
40
40
|
} catch { return false; }
|
|
41
41
|
}
|
|
42
42
|
|
|
43
|
+
// Render the open feedback queue. Pure — testable without the network.
|
|
44
|
+
function formatIssues(issues) {
|
|
45
|
+
if (!Array.isArray(issues) || issues.length === 0) {
|
|
46
|
+
return [' No open feedback right now — the queue is clear.'];
|
|
47
|
+
}
|
|
48
|
+
const lines = issues.slice(0, 15).map(i => {
|
|
49
|
+
const age = Math.max(0, Math.floor((Date.now() - new Date(i.created_at).getTime()) / 86400000));
|
|
50
|
+
const labels = (i.labels || []).map(l => l.name).filter(Boolean).join(', ');
|
|
51
|
+
return ` ${g('#' + i.number)} ${w(String(i.title).slice(0, 70))} ${g(`· ${age}d${labels ? ' · ' + labels : ''}`)}`;
|
|
52
|
+
});
|
|
53
|
+
lines.push('');
|
|
54
|
+
lines.push(` ${g('Pull one into the project room:')} ${cyan('phewsh dispatch "fix: <title> (#<n>)"')} ${g('— teammate or agent claims it, PR closes the loop.')}`);
|
|
55
|
+
return lines;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
// `phewsh feedback list` — read the public queue so feedback lands in
|
|
59
|
+
// phewsh's own loop (issue → task → claim → PR → record), with phewsh as
|
|
60
|
+
// the database rather than any one chat.
|
|
61
|
+
async function list() {
|
|
62
|
+
console.log('');
|
|
63
|
+
console.log(` ${b(w('Open feedback'))} ${g('— github.com/cleverIdeaz/phewsh-cli/issues')}`);
|
|
64
|
+
console.log('');
|
|
65
|
+
try {
|
|
66
|
+
const res = await fetch('https://api.github.com/repos/cleverIdeaz/phewsh-cli/issues?state=open&per_page=15', {
|
|
67
|
+
headers: { accept: 'application/vnd.github+json' },
|
|
68
|
+
signal: AbortSignal.timeout(6000),
|
|
69
|
+
});
|
|
70
|
+
if (!res.ok) throw new Error(`GitHub API ${res.status}`);
|
|
71
|
+
const issues = (await res.json()).filter(i => !i.pull_request); // issues only, not PRs
|
|
72
|
+
formatIssues(issues).forEach(l => console.log(l));
|
|
73
|
+
} catch (err) {
|
|
74
|
+
console.log(` ${g('Could not reach GitHub (' + err.message + ') — browse directly:')}`);
|
|
75
|
+
console.log(` ${w('https://github.com/cleverIdeaz/phewsh-cli/issues')}`);
|
|
76
|
+
}
|
|
77
|
+
console.log('');
|
|
78
|
+
}
|
|
79
|
+
|
|
43
80
|
function main() {
|
|
44
|
-
const
|
|
81
|
+
const argv = process.argv.slice(3);
|
|
82
|
+
if (argv[0] === 'list') return list();
|
|
83
|
+
const text = argv.filter(a => !a.startsWith('--')).join(' ');
|
|
45
84
|
const url = buildUrl(text);
|
|
46
85
|
console.log('');
|
|
47
86
|
console.log(` ${b(w('phewsh feedback'))} ${g('— where it breaks is exactly what we want to hear')}`);
|
|
@@ -60,3 +99,4 @@ function main() {
|
|
|
60
99
|
|
|
61
100
|
module.exports = main;
|
|
62
101
|
module.exports.buildUrl = buildUrl;
|
|
102
|
+
module.exports.formatIssues = formatIssues;
|
package/commands/status.js
CHANGED
|
@@ -59,7 +59,7 @@ function main() {
|
|
|
59
59
|
if (!hasIntent) {
|
|
60
60
|
console.log(row('PROJECT', `${off} ${sage('no shared project truth here yet')}`));
|
|
61
61
|
console.log(row('', slate('create it so you — and the next AI — inherit context:')));
|
|
62
|
-
console.log(row('', cream('phewsh
|
|
62
|
+
console.log(row('', `${cream('phewsh init')} ${slate('(two questions) · guided:')} ${cream('phewsh clarify')}`));
|
|
63
63
|
} else {
|
|
64
64
|
const files = fs.readdirSync(intentDir).filter(f => /\.(md|json)$/.test(f));
|
|
65
65
|
const has = (f) => files.includes(f);
|
package/lib/shims.js
CHANGED
|
@@ -114,7 +114,7 @@ function preflightBanner(bin, cwd = process.cwd()) {
|
|
|
114
114
|
const n = bumpNudge(cwd);
|
|
115
115
|
if (n <= 3) {
|
|
116
116
|
return `${C.sage('😮💨🤫 phewsh')} ${C.slate('· no shared project truth here yet')}\n`
|
|
117
|
-
+ ` ${C.slate('so every AI tool stays in sync, create it:')} ${C.cream('phewsh
|
|
117
|
+
+ ` ${C.slate('so every AI tool stays in sync, create it:')} ${C.cream('phewsh init')} ${C.slate('· → ' + bin)}`;
|
|
118
118
|
}
|
|
119
119
|
return `${C.sage('😮💨🤫 phewsh active')} ${C.slate('· → ' + bin)}`;
|
|
120
120
|
}
|
package/lib/slash-commands.js
CHANGED
|
@@ -24,7 +24,7 @@ const INTENT_PROMPT = `Show me this project's current intent, read from its \`.i
|
|
|
24
24
|
- **Constraints** — budget, time, scope, non-negotiables
|
|
25
25
|
- **Recent decisions** — and any that are still open
|
|
26
26
|
|
|
27
|
-
If there is no \`.intent/\` directory here, say so and tell me I can create one with \`phewsh
|
|
27
|
+
If there is no \`.intent/\` directory here, say so and tell me I can create one with \`phewsh init\` so every AI tool I use shares the same project truth.`;
|
|
28
28
|
|
|
29
29
|
// Tools that support file-based custom slash commands, and how each wants them.
|
|
30
30
|
// parentDir must already exist (the tool is installed) before we write.
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "phewsh",
|
|
3
|
-
"version": "0.15.
|
|
4
|
-
"description": "
|
|
3
|
+
"version": "0.15.77",
|
|
4
|
+
"description": "One mission. Many AI tools. No lost context. PHEWSH keeps your project's intent, decisions, and working context aligned across Claude Code, Codex, Cursor, Gemini and your team \u2014 so the next AI knows what the last one learned.",
|
|
5
5
|
"bin": {
|
|
6
6
|
"phewsh": "bin/phewsh.js"
|
|
7
7
|
},
|
|
@@ -25,7 +25,15 @@
|
|
|
25
25
|
"claude",
|
|
26
26
|
"mcp",
|
|
27
27
|
"model-context-protocol",
|
|
28
|
-
"phewsh"
|
|
28
|
+
"phewsh",
|
|
29
|
+
"continuity",
|
|
30
|
+
"context",
|
|
31
|
+
"agents",
|
|
32
|
+
"claude-code",
|
|
33
|
+
"codex",
|
|
34
|
+
"cursor",
|
|
35
|
+
"gemini",
|
|
36
|
+
"agents-md"
|
|
29
37
|
],
|
|
30
38
|
"author": "Phewsh <hello@phewsh.com>",
|
|
31
39
|
"license": "MIT",
|