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 CHANGED
@@ -1,6 +1,11 @@
1
1
  # phewsh
2
2
 
3
- Turn intent into action. Structure your thinking, execute your next step.
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 where it breaks — prefilled GitHub issue, nothing hidden')}`);
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')}`);
@@ -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 text = process.argv.slice(3).filter(a => !a.startsWith('--')).join(' ');
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;
@@ -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 intent --init')));
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 intent --init')} ${C.slate('· → ' + bin)}`;
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
  }
@@ -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 intent --init\` so every AI tool I use shares the same project truth.`;
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.75",
4
- "description": "Turn intent into action. Structure your thinking, execute your next step.",
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",