@raidiant/notifai 10.1.1 → 10.1.2

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.
Files changed (156) hide show
  1. package/CHANGELOG.md +20 -0
  2. package/dist/commands-core.d.ts +1 -1
  3. package/dist/commands-init.js +9 -6
  4. package/dist/commands-init.js.map +1 -1
  5. package/dist/commands-send-support.js +3 -0
  6. package/dist/commands-send-support.js.map +1 -1
  7. package/dist/commands-skill.js +72 -54
  8. package/dist/commands-skill.js.map +1 -1
  9. package/dist/invocation-context.d.ts +1 -0
  10. package/dist/invocation-context.js +9 -1
  11. package/dist/invocation-context.js.map +1 -1
  12. package/dist/native-skills.d.ts +13 -3
  13. package/dist/native-skills.js +51 -12
  14. package/dist/native-skills.js.map +1 -1
  15. package/dist/node-floor.d.ts +2 -1
  16. package/dist/node-floor.js +9 -5
  17. package/dist/node-floor.js.map +1 -1
  18. package/dist/orca-session-title.d.ts +5 -4
  19. package/dist/orca-session-title.js +32 -19
  20. package/dist/orca-session-title.js.map +1 -1
  21. package/dist/platform.d.ts +11 -17
  22. package/dist/platform.js +20 -23
  23. package/dist/platform.js.map +1 -1
  24. package/dist/release.d.ts +5 -5
  25. package/dist/release.js +5 -5
  26. package/dist/setup-destinations.js +1 -1
  27. package/dist/setup-destinations.js.map +1 -1
  28. package/dist/skill-integrity.d.ts +49 -0
  29. package/dist/skill-integrity.js +154 -0
  30. package/dist/skill-integrity.js.map +1 -0
  31. package/dist/skill-source/manifest.json +16 -0
  32. package/dist/skill-source/notifai/SKILL.md +390 -0
  33. package/dist/skill-source/notifai/references/harness-setup.md +220 -0
  34. package/package.json +11 -14
  35. package/src/atomic-file.ts +0 -198
  36. package/src/claude-wake.test.ts +0 -321
  37. package/src/claude-wake.ts +0 -499
  38. package/src/cli-bin.test.ts +0 -176
  39. package/src/cli-bin.ts +0 -233
  40. package/src/cli-release.test.ts +0 -46
  41. package/src/cli-release.ts +0 -78
  42. package/src/cli-update-contract.ts +0 -9
  43. package/src/cli-update.test.ts +0 -125
  44. package/src/client.test.ts +0 -390
  45. package/src/client.ts +0 -352
  46. package/src/codex-wake.test.ts +0 -254
  47. package/src/codex-wake.ts +0 -301
  48. package/src/command-session.ts +0 -38
  49. package/src/commands-agent-sessions.ts +0 -72
  50. package/src/commands-auth.ts +0 -238
  51. package/src/commands-config.ts +0 -336
  52. package/src/commands-core.ts +0 -312
  53. package/src/commands-devices.ts +0 -180
  54. package/src/commands-doctor.ts +0 -1501
  55. package/src/commands-guidance.ts +0 -181
  56. package/src/commands-harness-context.ts +0 -207
  57. package/src/commands-hook-shape.ts +0 -69
  58. package/src/commands-hooks.ts +0 -2318
  59. package/src/commands-init.ts +0 -1055
  60. package/src/commands-io.ts +0 -108
  61. package/src/commands-logs.ts +0 -243
  62. package/src/commands-project.ts +0 -47
  63. package/src/commands-send-support.test.ts +0 -156
  64. package/src/commands-send-support.ts +0 -311
  65. package/src/commands-send.ts +0 -875
  66. package/src/commands-setup-proof.test.ts +0 -72
  67. package/src/commands-setup-proof.ts +0 -124
  68. package/src/commands-skill.test.ts +0 -44
  69. package/src/commands-skill.ts +0 -204
  70. package/src/commands-sounds.test.ts +0 -106
  71. package/src/commands-sounds.ts +0 -49
  72. package/src/commands-update.ts +0 -180
  73. package/src/commands.test.ts +0 -8297
  74. package/src/commands.ts +0 -77
  75. package/src/config-schema.test.ts +0 -153
  76. package/src/config-schema.ts +0 -349
  77. package/src/config.test.ts +0 -581
  78. package/src/config.ts +0 -475
  79. package/src/credentials.test.ts +0 -403
  80. package/src/credentials.ts +0 -403
  81. package/src/file-lock-process-worker.test.ts +0 -64
  82. package/src/file-lock.test.ts +0 -320
  83. package/src/file-lock.ts +0 -393
  84. package/src/fixtures/hermes-0.20.6-classic-cli-local.json +0 -50
  85. package/src/fixtures/openclaw-2026.7.1-2-agent-local.json +0 -57
  86. package/src/generated-session-label.ts +0 -155
  87. package/src/guidance-content.ts +0 -278
  88. package/src/guidance-render.ts +0 -56
  89. package/src/guidance.test.ts +0 -327
  90. package/src/guidance.ts +0 -233
  91. package/src/harness-integration.test.ts +0 -294
  92. package/src/harnesses.test.ts +0 -149
  93. package/src/harnesses.ts +0 -164
  94. package/src/hook-adapter.test.ts +0 -496
  95. package/src/hook-adapter.ts +0 -424
  96. package/src/hook-input.test.ts +0 -39
  97. package/src/hook-input.ts +0 -72
  98. package/src/hooks.test.ts +0 -5824
  99. package/src/hooks.ts +0 -4011
  100. package/src/install-hooks.test.ts +0 -1614
  101. package/src/install-hooks.ts +0 -1501
  102. package/src/interactive.test.ts +0 -387
  103. package/src/interactive.ts +0 -858
  104. package/src/invocation-context.test.ts +0 -352
  105. package/src/invocation-context.ts +0 -197
  106. package/src/logging-process-worker.test.ts +0 -45
  107. package/src/logging.test.ts +0 -544
  108. package/src/logging.ts +0 -698
  109. package/src/main-run.ts +0 -45
  110. package/src/main.ts +0 -12
  111. package/src/native-skills.test.ts +0 -115
  112. package/src/native-skills.ts +0 -162
  113. package/src/node-floor.test.ts +0 -27
  114. package/src/node-floor.ts +0 -37
  115. package/src/onboarding-docs.test.ts +0 -25
  116. package/src/openclaw-plugin.ts +0 -409
  117. package/src/opencode-plugin.ts +0 -298
  118. package/src/orca-session-title.test.ts +0 -54
  119. package/src/orca-session-title.ts +0 -103
  120. package/src/pack-feedback-slice.test.ts +0 -212
  121. package/src/pack-feedback-slice.ts +0 -187
  122. package/src/platform.test.ts +0 -152
  123. package/src/platform.ts +0 -173
  124. package/src/program.test.ts +0 -317
  125. package/src/program.ts +0 -842
  126. package/src/project-enablement.test.ts +0 -55
  127. package/src/project-enablement.ts +0 -99
  128. package/src/question-caps.test.ts +0 -49
  129. package/src/question-settlement-process.ts +0 -47
  130. package/src/question-timing.ts +0 -56
  131. package/src/readiness.test.ts +0 -25
  132. package/src/readiness.ts +0 -212
  133. package/src/release.ts +0 -51
  134. package/src/send-attempts.test.ts +0 -143
  135. package/src/send-attempts.ts +0 -188
  136. package/src/send.test.ts +0 -28
  137. package/src/send.ts +0 -436
  138. package/src/session-activation.ts +0 -61
  139. package/src/session-end-log-lock-worker.test.ts +0 -35
  140. package/src/session-labels.test.ts +0 -490
  141. package/src/session-labels.ts +0 -474
  142. package/src/setup-destinations.test.ts +0 -41
  143. package/src/setup-destinations.ts +0 -50
  144. package/src/skill.test.ts +0 -426
  145. package/src/sound-ref.test.ts +0 -31
  146. package/src/sound-ref.ts +0 -34
  147. package/src/trust-policy.test.ts +0 -701
  148. package/src/ui/banner.ts +0 -95
  149. package/src/ui/config-view.test.ts +0 -90
  150. package/src/ui/config-view.ts +0 -138
  151. package/src/ui/help.test.ts +0 -16
  152. package/src/ui/help.ts +0 -128
  153. package/src/ui/theme.test.ts +0 -92
  154. package/src/ui/theme.ts +0 -265
  155. package/src/url-policy.ts +0 -399
  156. package/tsconfig.json +0 -10
@@ -2,11 +2,13 @@ import { spawn } from 'node:child_process';
2
2
  import { existsSync, readFileSync } from 'node:fs';
3
3
  import path from 'node:path';
4
4
  import { accountHome, npxLaunch } from './platform.js';
5
+ import { packageVersion } from './release.js';
6
+ import { stageShippedSkillBundle } from './skill-integrity.js';
5
7
  /**
6
8
  * Exact reviewed version of the external `skills` installer.
7
9
  *
8
- * The GitHub skill source stays the immutable CLI version tag. The installer
9
- * program that fetches it must not float on `latest`.
10
+ * The installer program must not float on `latest`. Notifai gives this pinned
11
+ * version a verified local copy from the installed npm package.
10
12
  */
11
13
  export const SKILLS_INSTALLER_SPEC = 'skills@1.5.23';
12
14
  function skillLockPath(scope, cwd, env) {
@@ -43,9 +45,11 @@ function skillsFromLock(scope, cwd, env) {
43
45
  {
44
46
  name,
45
47
  scope,
46
- path: typeof entry.skillPath === 'string' && entry.skillPath !== ''
47
- ? entry.skillPath
48
- : conventionalSkillPath(scope, name, cwd, env),
48
+ // skills@1.5.23 records the source-relative SKILL.md as `skillPath`.
49
+ // It is not the installed destination and is therefore not trusted for
50
+ // readiness. The installer contract puts skills at this conventional
51
+ // path for both scopes.
52
+ path: conventionalSkillPath(scope, name, cwd, env),
49
53
  source: typeof entry.source === 'string' ? entry.source : null,
50
54
  sourceType: typeof entry.sourceType === 'string' ? entry.sourceType : null,
51
55
  sourceUrl: typeof entry.sourceUrl === 'string' ? entry.sourceUrl : null,
@@ -54,11 +58,26 @@ function skillsFromLock(scope, cwd, env) {
54
58
  ];
55
59
  });
56
60
  }
57
- function run(args, options) {
61
+ export function runSkillsCommand(args, options, resolveLaunch = npxLaunch) {
58
62
  return new Promise((resolve) => {
59
- const launch = npxLaunch(args, options);
63
+ let launch;
64
+ try {
65
+ launch = resolveLaunch(args, options);
66
+ }
67
+ catch (error) {
68
+ resolve({
69
+ code: 1,
70
+ error: error instanceof Error ? error.message : 'the native skills installer could not start',
71
+ });
72
+ return;
73
+ }
60
74
  const child = spawn(launch.file, launch.args, launch.options);
61
- child.on('error', () => resolve(1));
75
+ child.on('error', () => {
76
+ resolve({
77
+ code: 1,
78
+ error: 'the native skills installer could not start on this machine; repair the local Node.js and npm installation, then rerun setup',
79
+ });
80
+ });
62
81
  child.on('exit', (code) => resolve(code ?? 1));
63
82
  });
64
83
  }
@@ -68,9 +87,10 @@ export function skillsAddArgv(options) {
68
87
  if (options.scope === 'global')
69
88
  args.push('--global');
70
89
  // An explicit scope is the unattended contract. Native `--yes` keeps all
71
- // remaining installer prompts non-interactive after the scope is chosen.
90
+ // remaining installer prompts non-interactive after the scope is chosen;
91
+ // `--copy` keeps the installed directory independent of temporary staging.
72
92
  if (options.scope !== undefined)
73
- args.push('--yes');
93
+ args.push('--copy', '--yes');
74
94
  return args;
75
95
  }
76
96
  /** argv for uninstalling one skill in one installer scope. */
@@ -84,10 +104,29 @@ export function skillsRemoveArgv(options) {
84
104
  /** The only process/filesystem adapter Notifai needs for the external installer. */
85
105
  export const nativeSkills = {
86
106
  async add(options) {
87
- return run(skillsAddArgv(options), { cwd: options.cwd, env: options.env });
107
+ const version = packageVersion();
108
+ if (version === null) {
109
+ return { code: 1, error: 'this CLI cannot establish which packaged skill belongs to it' };
110
+ }
111
+ const staged = stageShippedSkillBundle(options.cwd, version);
112
+ if (!staged.ok)
113
+ return { code: 1, error: staged.error };
114
+ try {
115
+ return await runSkillsCommand(skillsAddArgv({ ...options, source: staged.staged.source }), {
116
+ cwd: options.cwd,
117
+ env: options.env,
118
+ });
119
+ }
120
+ finally {
121
+ staged.staged.cleanup();
122
+ }
88
123
  },
89
124
  async remove(options) {
90
- return run(skillsRemoveArgv(options), { cwd: options.cwd, env: options.env });
125
+ const result = await runSkillsCommand(skillsRemoveArgv(options), {
126
+ cwd: options.cwd,
127
+ env: options.env,
128
+ });
129
+ return typeof result === 'number' ? result : result.code;
91
130
  },
92
131
  async list(scope, cwd, env) {
93
132
  // Presence is already on disk. `npx skills list` takes seconds and cannot
@@ -1 +1 @@
1
- {"version":3,"file":"native-skills.js","sourceRoot":"","sources":["../src/native-skills.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"native-skills.js","sourceRoot":"","sources":["../src/native-skills.ts"],"names":[],"mappings":"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"}
@@ -10,7 +10,8 @@
10
10
  * floor it is checking — so it can run and report on the runtimes it exists to
11
11
  * turn away. Everything else is loaded after it passes.
12
12
  */
13
- export declare const NODE_MAJOR_FLOOR = 22;
13
+ export declare const NODE_MAJOR_FLOOR = 20;
14
+ export declare const NODE_MINOR_FLOOR = 12;
14
15
  /** The major from a `process.version` string, or null when unrecognisable. */
15
16
  export declare function nodeMajor(version: string): number | null;
16
17
  export declare function belowNodeFloor(version: string): boolean;
@@ -10,7 +10,8 @@
10
10
  * floor it is checking — so it can run and report on the runtimes it exists to
11
11
  * turn away. Everything else is loaded after it passes.
12
12
  */
13
- export const NODE_MAJOR_FLOOR = 22;
13
+ export const NODE_MAJOR_FLOOR = 20;
14
+ export const NODE_MINOR_FLOOR = 12;
14
15
  /** The major from a `process.version` string, or null when unrecognisable. */
15
16
  export function nodeMajor(version) {
16
17
  const match = /^v?(\d+)\./.exec(version);
@@ -20,16 +21,19 @@ export function nodeMajor(version) {
20
21
  return Number.isFinite(major) ? major : null;
21
22
  }
22
23
  export function belowNodeFloor(version) {
23
- const major = nodeMajor(version);
24
+ const match = /^v?(\d+)\.(\d+)\.(\d+)/.exec(version);
24
25
  // An unrecognisable version is not evidence of an old runtime, and refusing
25
26
  // to run on one would strand a reader whose Node is fine.
26
- return major !== null && major < NODE_MAJOR_FLOOR;
27
+ if (match === null)
28
+ return false;
29
+ const [major, minor] = [Number(match[1]), Number(match[2])];
30
+ return major < NODE_MAJOR_FLOOR || (major === NODE_MAJOR_FLOOR && minor < NODE_MINOR_FLOOR);
27
31
  }
28
32
  /** One sentence for what is wrong, one for what to do about it. */
29
33
  export function nodeFloorMessage(version) {
30
34
  return [
31
- `Notifai needs Node ${NODE_MAJOR_FLOOR} or newer; this is Node ${version}.`,
32
- `next: install Node ${NODE_MAJOR_FLOOR}+ (https://nodejs.org), then run this again.`,
35
+ `Notifai needs Node ${NODE_MAJOR_FLOOR}.${NODE_MINOR_FLOOR} or newer; this is Node ${version}.`,
36
+ `next: install Node ${NODE_MAJOR_FLOOR}.${NODE_MINOR_FLOOR}+ (https://nodejs.org), then run this again.`,
33
37
  ];
34
38
  }
35
39
  //# sourceMappingURL=node-floor.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"node-floor.js","sourceRoot":"","sources":["../src/node-floor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,MAAM,CAAC,MAAM,gBAAgB,GAAG,EAAE,CAAA;AAElC,8EAA8E;AAC9E,MAAM,UAAU,SAAS,CAAC,OAAe;IACvC,MAAM,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IACxC,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,IAAI,CAAA;IAC/B,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;IAC9B,OAAO,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAA;AAC9C,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,OAAe;IAC5C,MAAM,KAAK,GAAG,SAAS,CAAC,OAAO,CAAC,CAAA;IAChC,4EAA4E;IAC5E,0DAA0D;IAC1D,OAAO,KAAK,KAAK,IAAI,IAAI,KAAK,GAAG,gBAAgB,CAAA;AACnD,CAAC;AAED,mEAAmE;AACnE,MAAM,UAAU,gBAAgB,CAAC,OAAe;IAC9C,OAAO;QACL,sBAAsB,gBAAgB,2BAA2B,OAAO,GAAG;QAC3E,sBAAsB,gBAAgB,8CAA8C;KACrF,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"node-floor.js","sourceRoot":"","sources":["../src/node-floor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,MAAM,CAAC,MAAM,gBAAgB,GAAG,EAAE,CAAA;AAClC,MAAM,CAAC,MAAM,gBAAgB,GAAG,EAAE,CAAA;AAElC,8EAA8E;AAC9E,MAAM,UAAU,SAAS,CAAC,OAAe;IACvC,MAAM,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IACxC,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,IAAI,CAAA;IAC/B,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;IAC9B,OAAO,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAA;AAC9C,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,OAAe;IAC5C,MAAM,KAAK,GAAG,wBAAwB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IACpD,4EAA4E;IAC5E,0DAA0D;IAC1D,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,KAAK,CAAA;IAChC,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IAC3D,OAAO,KAAK,GAAG,gBAAgB,IAAI,CAAC,KAAK,KAAK,gBAAgB,IAAI,KAAK,GAAG,gBAAgB,CAAC,CAAA;AAC7F,CAAC;AAED,mEAAmE;AACnE,MAAM,UAAU,gBAAgB,CAAC,OAAe;IAC9C,OAAO;QACL,sBAAsB,gBAAgB,IAAI,gBAAgB,2BAA2B,OAAO,GAAG;QAC/F,sBAAsB,gBAAgB,IAAI,gBAAgB,8CAA8C;KACzG,CAAA;AACH,CAAC"}
@@ -1,10 +1,11 @@
1
1
  export type OrcaSessionTitleLookup = (env: NodeJS.ProcessEnv) => string | undefined;
2
2
  export type OrcaCommand = (executable: string, args: readonly string[]) => string | null;
3
3
  /**
4
- * Read the User-facing task name assigned to this exact Orca worktree.
4
+ * Read the User-facing task name assigned to this exact Orca Agent Session.
5
5
  *
6
- * The environment contributes only an opaque selector. Orca must return that
7
- * exact id and its matching path before its display name becomes trusted; no
8
- * path component or identifier is ever promoted into an Agent Session label.
6
+ * The environment contributes only opaque selectors. Orca must return the
7
+ * exact worktree id and path plus the exact pane before its task title becomes
8
+ * trusted; Project, branch, path, worktree, and pane strings are never
9
+ * promoted into an Agent Session label.
9
10
  */
10
11
  export declare function readOrcaSessionTitle(env: NodeJS.ProcessEnv, command?: OrcaCommand): string | undefined;
@@ -34,6 +34,15 @@ function worktreePathFromId(value) {
34
34
  ? worktreePath
35
35
  : null;
36
36
  }
37
+ function opaqueSelector(value) {
38
+ if (value === undefined ||
39
+ value.length === 0 ||
40
+ value.length > 1_024 ||
41
+ containsControlCharacter(value)) {
42
+ return null;
43
+ }
44
+ return value;
45
+ }
37
46
  function orcaExecutable(env) {
38
47
  const configured = env['ORCA_CLI_COMMAND']?.trim();
39
48
  if (configured !== undefined && configured.length > 0) {
@@ -42,11 +51,12 @@ function orcaExecutable(env) {
42
51
  return env['ORCA_DEV_REPO_ROOT'] === undefined ? 'orca' : 'orca-dev';
43
52
  }
44
53
  /**
45
- * Read the User-facing task name assigned to this exact Orca worktree.
54
+ * Read the User-facing task name assigned to this exact Orca Agent Session.
46
55
  *
47
- * The environment contributes only an opaque selector. Orca must return that
48
- * exact id and its matching path before its display name becomes trusted; no
49
- * path component or identifier is ever promoted into an Agent Session label.
56
+ * The environment contributes only opaque selectors. Orca must return the
57
+ * exact worktree id and path plus the exact pane before its task title becomes
58
+ * trusted; Project, branch, path, worktree, and pane strings are never
59
+ * promoted into an Agent Session label.
50
60
  */
51
61
  export function readOrcaSessionTitle(env, command = runOrcaCommand) {
52
62
  if (env['TERM_PROGRAM'] !== 'Orca')
@@ -57,18 +67,15 @@ export function readOrcaSessionTitle(env, command = runOrcaCommand) {
57
67
  const expectedPath = worktreePathFromId(worktreeId);
58
68
  if (expectedPath === null)
59
69
  return undefined;
70
+ const paneKey = opaqueSelector(env['ORCA_PANE_KEY']);
71
+ if (paneKey === null)
72
+ return undefined;
60
73
  const executable = orcaExecutable(env);
61
74
  if (executable === null)
62
75
  return undefined;
63
76
  let output;
64
77
  try {
65
- output = command(executable, [
66
- 'worktree',
67
- 'show',
68
- '--worktree',
69
- `id:${worktreeId}`,
70
- '--json',
71
- ]);
78
+ output = command(executable, ['worktree', 'ps', '--json']);
72
79
  }
73
80
  catch {
74
81
  return undefined;
@@ -85,14 +92,20 @@ export function readOrcaSessionTitle(env, command = runOrcaCommand) {
85
92
  if (typeof parsed !== 'object' || parsed === null)
86
93
  return undefined;
87
94
  const response = parsed;
88
- const worktree = response.result?.worktree;
89
- if (response.ok !== true ||
90
- worktree?.id !== worktreeId ||
91
- worktree.path !== expectedPath ||
92
- typeof worktree.displayName !== 'string' ||
93
- worktree.displayName.trim().length === 0) {
95
+ if (response.ok !== true || !Array.isArray(response.result?.worktrees))
94
96
  return undefined;
95
- }
96
- return worktree.displayName;
97
+ const worktrees = response.result.worktrees.filter((candidate) => typeof candidate === 'object' &&
98
+ candidate !== null &&
99
+ candidate.worktreeId === worktreeId &&
100
+ candidate.path === expectedPath);
101
+ if (worktrees.length !== 1 || !Array.isArray(worktrees[0].agents))
102
+ return undefined;
103
+ const agents = worktrees[0].agents.filter((candidate) => typeof candidate === 'object' &&
104
+ candidate !== null &&
105
+ candidate.paneKey === paneKey);
106
+ if (agents.length !== 1)
107
+ return undefined;
108
+ const taskTitle = agents[0].taskTitle;
109
+ return typeof taskTitle === 'string' && taskTitle.trim().length > 0 ? taskTitle : undefined;
97
110
  }
98
111
  //# sourceMappingURL=orca-session-title.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"orca-session-title.js","sourceRoot":"","sources":["../src/orca-session-title.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACjD,OAAO,IAAI,MAAM,WAAW,CAAA;AAK5B,MAAM,cAAc,GAAgB,CAAC,UAAU,EAAE,IAAI,EAAE,EAAE;IACvD,IAAI,CAAC;QACH,OAAO,YAAY,CAAC,UAAU,EAAE,IAAI,EAAE;YACpC,QAAQ,EAAE,MAAM;YAChB,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC;YACnC,OAAO,EAAE,KAAK;YACd,SAAS,EAAE,GAAG,GAAG,IAAI;YACrB,WAAW,EAAE,IAAI;SAClB,CAAC,CAAC,IAAI,EAAE,CAAA;IACX,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAA;IACb,CAAC;AACH,CAAC,CAAA;AAED,SAAS,wBAAwB,CAAC,KAAa;IAC7C,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE;QAC1C,MAAM,SAAS,GAAG,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;QAC/C,OAAO,SAAS,GAAG,EAAE,IAAI,SAAS,KAAK,GAAG,CAAA;IAC5C,CAAC,CAAC,CAAA;AACJ,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAa;IACvC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,GAAG,KAAK,IAAI,wBAAwB,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,CAAA;IAC9F,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;IACrC,IAAI,SAAS,IAAI,CAAC;QAAE,OAAO,IAAI,CAAA;IAC/B,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,CAAA;IACxC,MAAM,YAAY,GAAG,KAAK,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC,CAAA;IAC/C,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAA;IAChF,OAAO,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,YAAY,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,YAAY,CAAC;QAC/E,CAAC,CAAC,YAAY;QACd,CAAC,CAAC,IAAI,CAAA;AACV,CAAC;AAED,SAAS,cAAc,CAAC,GAAsB;IAC5C,MAAM,UAAU,GAAG,GAAG,CAAC,kBAAkB,CAAC,EAAE,IAAI,EAAE,CAAA;IAClD,IAAI,UAAU,KAAK,SAAS,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtD,OAAO,wBAAwB,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAA;IACjE,CAAC;IACD,OAAO,GAAG,CAAC,oBAAoB,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAA;AACtE,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,oBAAoB,CAClC,GAAsB,EACtB,UAAuB,cAAc;IAErC,IAAI,GAAG,CAAC,cAAc,CAAC,KAAK,MAAM;QAAE,OAAO,SAAS,CAAA;IACpD,MAAM,UAAU,GAAG,GAAG,CAAC,kBAAkB,CAAC,CAAA;IAC1C,IAAI,UAAU,KAAK,SAAS;QAAE,OAAO,SAAS,CAAA;IAC9C,MAAM,YAAY,GAAG,kBAAkB,CAAC,UAAU,CAAC,CAAA;IACnD,IAAI,YAAY,KAAK,IAAI;QAAE,OAAO,SAAS,CAAA;IAC3C,MAAM,UAAU,GAAG,cAAc,CAAC,GAAG,CAAC,CAAA;IACtC,IAAI,UAAU,KAAK,IAAI;QAAE,OAAO,SAAS,CAAA;IAEzC,IAAI,MAAqB,CAAA;IACzB,IAAI,CAAC;QACH,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE;YAC3B,UAAU;YACV,MAAM;YACN,YAAY;YACZ,MAAM,UAAU,EAAE;YAClB,QAAQ;SACT,CAAC,CAAA;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAA;IAClB,CAAC;IACD,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,EAAE;QAAE,OAAO,SAAS,CAAA;IAEtD,IAAI,MAAe,CAAA;IACnB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;IAC7B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAA;IAClB,CAAC;IACD,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI;QAAE,OAAO,SAAS,CAAA;IACnE,MAAM,QAAQ,GAAG,MAGhB,CAAA;IACD,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAA;IAC1C,IACE,QAAQ,CAAC,EAAE,KAAK,IAAI;QACpB,QAAQ,EAAE,EAAE,KAAK,UAAU;QAC3B,QAAQ,CAAC,IAAI,KAAK,YAAY;QAC9B,OAAO,QAAQ,CAAC,WAAW,KAAK,QAAQ;QACxC,QAAQ,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EACxC,CAAC;QACD,OAAO,SAAS,CAAA;IAClB,CAAC;IACD,OAAO,QAAQ,CAAC,WAAW,CAAA;AAC7B,CAAC"}
1
+ {"version":3,"file":"orca-session-title.js","sourceRoot":"","sources":["../src/orca-session-title.ts"],"names":[],"mappings":"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"}
@@ -44,30 +44,24 @@ export declare function urlOpenLaunch(url: string, platform?: NodeJS.Platform):
44
44
  /** Best-effort browser open. Failure is silent: the URL is printed either way. */
45
45
  export declare function openUrl(url: string, platform?: NodeJS.Platform): void;
46
46
  /**
47
- * Quote one cmd.exe argument so it cannot start a second command.
48
- *
49
- * `%` expands even inside quotes, so it is doubled. Quotes themselves are
50
- * doubled. Everything else is inert once quoted, including `& | > < ^`.
51
- */
52
- export declare function quoteCmdArgument(value: string): string;
53
- /**
54
- * A single `/c` argument for `cmd /d /s /c`.
55
- *
56
- * `/s` strips the first and last quote when both ends are quotes, so the
57
- * payload is wrapped once more around the already-quoted argv. What cmd then
58
- * runs is `"npx.cmd" "-y" …` with no unquoted metacharacters.
47
+ * Resolve npm's JavaScript npx entry point when this Windows Node installation
48
+ * exposes it. Invoking that file with the current Node runtime avoids the
49
+ * cwd-sensitive relative paths embedded in some npx.cmd shims.
59
50
  */
60
- export declare function cmdScript(command: string, args: readonly string[]): string;
51
+ export declare function windowsNpxCli(nodeExecutable?: string): string | null;
61
52
  /**
62
- * Launch `npx` so Windows can run the `.cmd` shim.
53
+ * Launch `npx` without making its resolution depend on the target project.
63
54
  *
64
- * `spawn('npx', …)` is CreateProcess of a file named `npx`, which does not
65
- * exist — npm installs `npx.cmd`. cmd.exe can run that shim; CreateProcess
66
- * cannot. Arguments stay in one quoted `/c` string rather than `shell: true`.
55
+ * Prefer npm's JavaScript entry point, which avoids both CreateProcess's
56
+ * inability to run `.cmd` files and shims whose relative paths depend on the
57
+ * working directory. A nonstandard Windows Node layout fails closed instead
58
+ * of executing an environment-selected shell or command shim; POSIX can
59
+ * execute `npx` directly without a shell.
67
60
  */
68
61
  export declare function npxLaunch(args: readonly string[], options: {
69
62
  cwd: string;
70
63
  env: NodeJS.ProcessEnv;
64
+ nodeExecutable?: string;
71
65
  platform?: NodeJS.Platform;
72
66
  stdio?: SpawnOptions['stdio'];
73
67
  }): ProcessLaunch;
package/dist/platform.js CHANGED
@@ -1,4 +1,5 @@
1
1
  import { spawn } from 'node:child_process';
2
+ import { existsSync } from 'node:fs';
2
3
  import os from 'node:os';
3
4
  import path from 'node:path';
4
5
  /** Drive letter or UNC. MSYS `/c/Users/…` is not a Windows account home. */
@@ -93,44 +94,40 @@ export function openUrl(url, platform = process.platform) {
93
94
  }
94
95
  }
95
96
  /**
96
- * Quote one cmd.exe argument so it cannot start a second command.
97
- *
98
- * `%` expands even inside quotes, so it is doubled. Quotes themselves are
99
- * doubled. Everything else is inert once quoted, including `& | > < ^`.
100
- */
101
- export function quoteCmdArgument(value) {
102
- return `"${value.replace(/%/g, '%%').replace(/"/g, '""')}"`;
103
- }
104
- /**
105
- * A single `/c` argument for `cmd /d /s /c`.
106
- *
107
- * `/s` strips the first and last quote when both ends are quotes, so the
108
- * payload is wrapped once more around the already-quoted argv. What cmd then
109
- * runs is `"npx.cmd" "-y" …` with no unquoted metacharacters.
97
+ * Resolve npm's JavaScript npx entry point when this Windows Node installation
98
+ * exposes it. Invoking that file with the current Node runtime avoids the
99
+ * cwd-sensitive relative paths embedded in some npx.cmd shims.
110
100
  */
111
- export function cmdScript(command, args) {
112
- return `"${[command, ...args].map(quoteCmdArgument).join(' ')}"`;
101
+ export function windowsNpxCli(nodeExecutable = process.execPath) {
102
+ const bundledWithNode = path.join(path.dirname(nodeExecutable), 'node_modules', 'npm', 'bin', 'npx-cli.js');
103
+ return existsSync(bundledWithNode) ? bundledWithNode : null;
113
104
  }
114
105
  /**
115
- * Launch `npx` so Windows can run the `.cmd` shim.
106
+ * Launch `npx` without making its resolution depend on the target project.
116
107
  *
117
- * `spawn('npx', …)` is CreateProcess of a file named `npx`, which does not
118
- * exist — npm installs `npx.cmd`. cmd.exe can run that shim; CreateProcess
119
- * cannot. Arguments stay in one quoted `/c` string rather than `shell: true`.
108
+ * Prefer npm's JavaScript entry point, which avoids both CreateProcess's
109
+ * inability to run `.cmd` files and shims whose relative paths depend on the
110
+ * working directory. A nonstandard Windows Node layout fails closed instead
111
+ * of executing an environment-selected shell or command shim; POSIX can
112
+ * execute `npx` directly without a shell.
120
113
  */
121
114
  export function npxLaunch(args, options) {
122
115
  const platform = options.platform ?? process.platform;
123
116
  const stdio = options.stdio ?? 'inherit';
124
117
  if (platform === 'win32') {
118
+ const nodeExecutable = options.nodeExecutable ?? process.execPath;
119
+ const npxCli = windowsNpxCli(nodeExecutable);
120
+ if (npxCli === null) {
121
+ throw new Error('this Windows Node.js installation is missing its bundled npm tools; repair or reinstall Node.js, then rerun setup');
122
+ }
125
123
  return {
126
- file: options.env['ComSpec'] && options.env['ComSpec'] !== '' ? options.env['ComSpec'] : 'cmd.exe',
127
- args: ['/d', '/s', '/v:off', '/c', cmdScript('npx.cmd', args)],
124
+ file: nodeExecutable,
125
+ args: [npxCli, ...args],
128
126
  options: {
129
127
  cwd: options.cwd,
130
128
  env: options.env,
131
129
  stdio,
132
130
  windowsHide: true,
133
- windowsVerbatimArguments: true,
134
131
  },
135
132
  };
136
133
  }
@@ -1 +1 @@
1
- {"version":3,"file":"platform.js","sourceRoot":"","sources":["../src/platform.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"platform.js","sourceRoot":"","sources":["../src/platform.ts"],"names":[],"mappings":"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"}
package/dist/release.d.ts CHANGED
@@ -19,11 +19,11 @@ export declare function packageVersion(): string | null;
19
19
  /**
20
20
  * Where `npx skills add` fetches the agent skill from, as printed to users.
21
21
  *
22
- * Always an immutable tag naming this exact build. The skill and the CLI ship
23
- * from one repository at one version, and the skill describes how to drive the
24
- * CLI — so a moving ref would hand someone guidance for a tool they do not
25
- * have. Deriving it from the version is what keeps the two from disagreeing;
26
- * it used to be maintained by hand in three places, and the copies drifted.
22
+ * The human-readable release tag naming this exact build. The installer does
23
+ * not trust or fetch this ref: it installs the verified skill embedded in the
24
+ * npm package through a short-lived local source. Deriving the label from the
25
+ * version keeps release identity from drifting; it used to be maintained by
26
+ * hand in three places.
27
27
  *
28
28
  * In the skills CLI grammar `owner/repo#ref` selects a Git ref, while
29
29
  * `owner/repo@name` selects a skill — so the `#` here is load-bearing.
package/dist/release.js CHANGED
@@ -36,11 +36,11 @@ export function packageVersion() {
36
36
  /**
37
37
  * Where `npx skills add` fetches the agent skill from, as printed to users.
38
38
  *
39
- * Always an immutable tag naming this exact build. The skill and the CLI ship
40
- * from one repository at one version, and the skill describes how to drive the
41
- * CLI — so a moving ref would hand someone guidance for a tool they do not
42
- * have. Deriving it from the version is what keeps the two from disagreeing;
43
- * it used to be maintained by hand in three places, and the copies drifted.
39
+ * The human-readable release tag naming this exact build. The installer does
40
+ * not trust or fetch this ref: it installs the verified skill embedded in the
41
+ * npm package through a short-lived local source. Deriving the label from the
42
+ * version keeps release identity from drifting; it used to be maintained by
43
+ * hand in three places.
44
44
  *
45
45
  * In the skills CLI grammar `owner/repo#ref` selects a Git ref, while
46
46
  * `owner/repo@name` selects a skill — so the `#` here is load-bearing.
@@ -22,7 +22,7 @@ export function companionPlatformLabel(platform) {
22
22
  */
23
23
  function dashboardOrigin(baseUrl) {
24
24
  const normalized = baseUrl.replace(/\/+$/, '');
25
- if (normalized === 'https://api.notifai.sh' || normalized === 'https://notifai.fly.dev') {
25
+ if (normalized === 'https://api.notifai.sh') {
26
26
  return 'https://app.notifai.sh';
27
27
  }
28
28
  return normalized;
@@ -1 +1 @@
1
- {"version":3,"file":"setup-destinations.js","sourceRoot":"","sources":["../src/setup-destinations.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,yEAAyE;AACzE,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,QAAQ,EAAE,SAAS,CAAU,CAAA;AAGjE,MAAM,UAAU,sBAAsB,CAAC,QAA2B;IAChE,OAAO,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAA;AACrD,CAAC;AAED;;;GAGG;AACH,SAAS,eAAe,CAAC,OAAe;IACtC,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAA;IAC9C,IAAI,UAAU,KAAK,wBAAwB,IAAI,UAAU,KAAK,yBAAyB,EAAE,CAAC;QACxF,OAAO,wBAAwB,CAAA;IACjC,CAAC;IACD,OAAO,UAAU,CAAA;AACnB,CAAC;AAED,gEAAgE;AAChE,MAAM,UAAU,cAAc,CAAC,OAAe,EAAE,QAA4B;IAC1E,MAAM,IAAI,GAAG,GAAG,eAAe,CAAC,OAAO,CAAC,eAAe,CAAA;IACvD,OAAO,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,aAAa,QAAQ,EAAE,CAAA;AACvE,CAAC;AAED,0DAA0D;AAC1D,MAAM,UAAU,iBAAiB,CAAC,OAAe,EAAE,QAA4B;IAC7E,MAAM,IAAI,GAAG,GAAG,eAAe,CAAC,OAAO,CAAC,kBAAkB,CAAA;IAC1D,OAAO,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,aAAa,QAAQ,EAAE,CAAA;AACvE,CAAC;AAED,oEAAoE;AACpE,MAAM,UAAU,cAAc,CAAC,OAAe;IAC5C,OAAO,GAAG,eAAe,CAAC,OAAO,CAAC,UAAU,CAAA;AAC9C,CAAC"}
1
+ {"version":3,"file":"setup-destinations.js","sourceRoot":"","sources":["../src/setup-destinations.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,yEAAyE;AACzE,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,QAAQ,EAAE,SAAS,CAAU,CAAA;AAGjE,MAAM,UAAU,sBAAsB,CAAC,QAA2B;IAChE,OAAO,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAA;AACrD,CAAC;AAED;;;GAGG;AACH,SAAS,eAAe,CAAC,OAAe;IACtC,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAA;IAC9C,IAAI,UAAU,KAAK,wBAAwB,EAAE,CAAC;QAC5C,OAAO,wBAAwB,CAAA;IACjC,CAAC;IACD,OAAO,UAAU,CAAA;AACnB,CAAC;AAED,gEAAgE;AAChE,MAAM,UAAU,cAAc,CAAC,OAAe,EAAE,QAA4B;IAC1E,MAAM,IAAI,GAAG,GAAG,eAAe,CAAC,OAAO,CAAC,eAAe,CAAA;IACvD,OAAO,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,aAAa,QAAQ,EAAE,CAAA;AACvE,CAAC;AAED,0DAA0D;AAC1D,MAAM,UAAU,iBAAiB,CAAC,OAAe,EAAE,QAA4B;IAC7E,MAAM,IAAI,GAAG,GAAG,eAAe,CAAC,OAAO,CAAC,kBAAkB,CAAA;IAC1D,OAAO,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,aAAa,QAAQ,EAAE,CAAA;AACvE,CAAC;AAED,oEAAoE;AACpE,MAAM,UAAU,cAAc,CAAC,OAAe;IAC5C,OAAO,GAAG,eAAe,CAAC,OAAO,CAAC,UAAU,CAAA;AAC9C,CAAC"}
@@ -0,0 +1,49 @@
1
+ export interface SkillManifestFile {
2
+ path: string;
3
+ sha256: string;
4
+ }
5
+ export interface SkillManifest {
6
+ schema_version: 1;
7
+ package_version: string;
8
+ skill: 'notifai';
9
+ digest: string;
10
+ files: SkillManifestFile[];
11
+ }
12
+ export interface VerifiedSkillBundle {
13
+ sourceRoot: string;
14
+ skillRoot: string;
15
+ manifest: SkillManifest;
16
+ }
17
+ export type SkillBundleResult = {
18
+ ok: true;
19
+ bundle: VerifiedSkillBundle;
20
+ } | {
21
+ ok: false;
22
+ error: string;
23
+ };
24
+ export interface StagedSkillBundle {
25
+ /** Machine-neutral path relative to the installer project cwd. */
26
+ source: string;
27
+ cleanup(): void;
28
+ }
29
+ /** Local-source grammar accepted by skills@1.5.23 on every supported host. */
30
+ export declare function portableLocalInstallerSource(cwd: string, source: string, platform?: NodeJS.Platform): string;
31
+ /** Build the exact content identity stored beside the skill in the npm tarball. */
32
+ export declare function createSkillManifest(skillRoot: string, packageVersion: string): SkillManifest;
33
+ /** Verify a bundle before either its bytes or its manifest are trusted. */
34
+ export declare function verifySkillBundle(sourceRoot: string, expectedPackageVersion?: string): SkillBundleResult;
35
+ /** Locate the generated bundle in a published install or a built source checkout. */
36
+ export declare function shippedSkillBundle(expectedPackageVersion?: string): SkillBundleResult;
37
+ /**
38
+ * Copy the verified npm-bundled skill to a short-lived project-relative source
39
+ * understood by the pinned native installer. The relative argument keeps the
40
+ * installer lock free of account names and absolute paths; the copied install
41
+ * remains after this staging directory is removed.
42
+ */
43
+ export declare function stageShippedSkillBundle(cwd: string, packageVersion: string): {
44
+ ok: true;
45
+ staged: StagedSkillBundle;
46
+ } | {
47
+ ok: false;
48
+ error: string;
49
+ };