pinokiod 7.2.16 → 7.2.18

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 (51) hide show
  1. package/kernel/agent_instructions.js +166 -0
  2. package/kernel/api/index.js +137 -12
  3. package/kernel/bin/huggingface.js +1 -1
  4. package/kernel/environment.js +23 -9
  5. package/kernel/plugin_sources.js +57 -4
  6. package/kernel/prototype.js +4 -0
  7. package/kernel/shell.js +2 -0
  8. package/kernel/watch/index.js +31 -4
  9. package/package.json +1 -1
  10. package/server/features/index.js +4 -4
  11. package/server/features/{drafts → notes}/index.js +9 -9
  12. package/server/features/{drafts → notes}/parser.js +12 -7
  13. package/server/features/notes/public/notes.css +955 -0
  14. package/server/features/notes/public/notes.js +1149 -0
  15. package/server/features/{drafts → notes}/registry_import.js +59 -74
  16. package/server/features/notes/routes.js +156 -0
  17. package/server/features/notes/service.js +326 -0
  18. package/server/features/{drafts → notes}/watcher.js +14 -16
  19. package/server/index.js +61 -30
  20. package/server/lib/content_validation.js +19 -8
  21. package/server/lib/workspace_catalog.js +18 -18
  22. package/server/public/task-launcher.css +11 -3
  23. package/server/public/tasker.css +336 -0
  24. package/server/public/tasker.js +407 -0
  25. package/server/views/d.ejs +33 -2
  26. package/server/views/partials/menu.ejs +1 -1
  27. package/server/views/partials/workspace_row.ejs +11 -11
  28. package/server/views/pre.ejs +1 -1
  29. package/server/views/task_launch.ejs +10 -10
  30. package/server/views/tasker.ejs +40 -0
  31. package/server/views/terminal.ejs +15 -6
  32. package/server/views/terminals.ejs +0 -1
  33. package/server/views/workspaces.ejs +2 -1
  34. package/system/plugin/antigravity/pinokio.js +2 -4
  35. package/system/plugin/claude/pinokio.js +2 -4
  36. package/system/plugin/claude-auto/pinokio.js +2 -4
  37. package/system/plugin/claude-desktop/pinokio.js +2 -4
  38. package/system/plugin/codex/pinokio.js +2 -4
  39. package/system/plugin/codex-auto/pinokio.js +2 -4
  40. package/system/plugin/codex-desktop/pinokio.js +2 -4
  41. package/system/plugin/crush/pinokio.js +2 -4
  42. package/system/plugin/cursor/pinokio.js +2 -4
  43. package/system/plugin/gemini/pinokio.js +2 -4
  44. package/system/plugin/gemini-auto/pinokio.js +2 -4
  45. package/system/plugin/qwen/pinokio.js +2 -4
  46. package/system/plugin/vscode/pinokio.js +2 -4
  47. package/system/plugin/windsurf/pinokio.js +2 -4
  48. package/test/plugin-sources.test.js +45 -0
  49. package/server/features/drafts/public/drafts.js +0 -1569
  50. package/server/features/drafts/routes.js +0 -68
  51. package/server/features/drafts/service.js +0 -261
@@ -895,6 +895,7 @@ const createPluginTerminalDiscoveryRefresher = (context = {}) => {
895
895
  const enabled = (() => {
896
896
  try {
897
897
  return window.location.pathname.startsWith("/run/plugin/")
898
+ || window.location.pathname.startsWith("/pinokio/run/plugin/")
898
899
  || (window.location.pathname.startsWith("/run/api/") && /\/pinokio\.js$/i.test(window.location.pathname))
899
900
  } catch (_) {
900
901
  return false
@@ -2783,6 +2784,10 @@ document.addEventListener("DOMContentLoaded", async () => {
2783
2784
  this.resizeSync.sendResize(this.term.cols, this.term.rows)
2784
2785
  });
2785
2786
  this.observer.observe(document.body)
2787
+ const terminalContainer = document.querySelector(".terminal-container")
2788
+ if (terminalContainer) {
2789
+ this.observer.observe(terminalContainer)
2790
+ }
2786
2791
  }
2787
2792
  }
2788
2793
  <% if (!install_required) { %>
@@ -2928,9 +2933,9 @@ const reloadMemory = async () => {
2928
2933
  </script>
2929
2934
  </head>
2930
2935
  <% if (install_required) { %>
2931
- <body class='terminal-page frozen <%=theme%> <%= locals.full_navbar ? "has-full-navbar" : "" %>' data-task-save-cwd="<%= cwd || '' %>" data-task-save-workspaces-root="<%= taskSaveWorkspacesRoot || '' %>">
2936
+ <body class='terminal-page frozen <%=theme%> <%= locals.full_navbar ? "has-full-navbar" : "" %>' data-pinokio-notes-scope="true" data-task-save-cwd="<%= cwd || '' %>" data-task-save-workspaces-root="<%= taskSaveWorkspacesRoot || '' %>">
2932
2937
  <% } else { %>
2933
- <body class='terminal-page <%=theme%> <%= locals.full_navbar ? "has-full-navbar" : "" %>' data-task-save-cwd="<%= cwd || '' %>" data-task-save-workspaces-root="<%= taskSaveWorkspacesRoot || '' %>">
2938
+ <body class='terminal-page <%=theme%> <%= locals.full_navbar ? "has-full-navbar" : "" %>' data-pinokio-notes-scope="true" data-task-save-cwd="<%= cwd || '' %>" data-task-save-workspaces-root="<%= taskSaveWorkspacesRoot || '' %>">
2934
2939
  <% } %>
2935
2940
  <% if (locals.full_navbar) { %>
2936
2941
  <header class="navheader grabbable">
@@ -2960,6 +2965,9 @@ const reloadMemory = async () => {
2960
2965
  </h1>
2961
2966
  </header>
2962
2967
  <% } %>
2968
+ <% if (!install_required && typeof note_watch_enabled !== 'undefined' && note_watch_enabled) { %>
2969
+ <div id="pinokio-notes-slot" class="pinokio-notes-slot" aria-live="polite"></div>
2970
+ <% } %>
2963
2971
  <% if (!install_required) { %>
2964
2972
  <header class='navheader2'>
2965
2973
  <div class='runner'>
@@ -3098,13 +3106,14 @@ const reloadMemory = async () => {
3098
3106
  </a>
3099
3107
  </div>
3100
3108
  </div>
3101
- <% if (typeof draft_watch_enabled !== 'undefined' && draft_watch_enabled) { %>
3109
+ <% if (typeof note_watch_enabled !== 'undefined' && note_watch_enabled) { %>
3102
3110
  <script>
3103
- window.PinokioDraftContext = {
3104
- cwd: <%- JSON.stringify((typeof draft_watch_cwd !== 'undefined' && draft_watch_cwd) ? draft_watch_cwd : '').replace(/</g, '\\u003c') %>
3111
+ window.PinokioNoteContext = {
3112
+ cwd: <%- JSON.stringify((typeof note_watch_cwd !== 'undefined' && note_watch_cwd) ? note_watch_cwd : '').replace(/</g, '\\u003c') %>
3105
3113
  };
3106
3114
  </script>
3107
- <script src="/drafts.js"></script>
3115
+ <link rel="stylesheet" href="/notes.css?v=flow-footer-fullscreen">
3116
+ <script src="/notes.js?v=flow-footer-fullscreen"></script>
3108
3117
  <% } %>
3109
3118
  </body>
3110
3119
  </html>
@@ -10030,6 +10030,5 @@ body.dark .swal2-popup.pinokio-diff-modal .pinokio-modal-footer--commit .pinokio
10030
10030
  requestAnimationFrame(setViewport)
10031
10031
  })()
10032
10032
  </script>
10033
- <script src="/drafts.js"></script>
10034
10033
  </body>
10035
10034
  </html>
@@ -285,7 +285,7 @@
285
285
  background: rgba(255, 255, 255, 0.06);
286
286
  color: var(--dark-fade);
287
287
  }
288
- .workspaces-page .workspace-draft-preview {
288
+ .workspaces-page .workspace-note-preview {
289
289
  margin: 4px 0 8px;
290
290
  padding: 8px 0 0;
291
291
  color: inherit;
@@ -642,6 +642,7 @@
642
642
  url.origin === location.origin
643
643
  && (
644
644
  url.pathname.startsWith("/run/plugin/")
645
+ || url.pathname.startsWith("/pinokio/run/plugin/")
645
646
  || (url.pathname.startsWith("/run/api/") && /\/pinokio\.js$/i.test(url.pathname))
646
647
  )
647
648
  ) {
@@ -5,11 +5,9 @@ module.exports = {
5
5
  description: "The AI IDE from Google",
6
6
  launch_type: "desktop",
7
7
  watch: [{
8
- handler: "draft",
9
- method: "ready",
8
+ method: "note.watch",
10
9
  params: {
11
- path: ".pinokio/draft",
12
- content: "post.md",
10
+ path: ".pinokio/notes",
13
11
  publish: {
14
12
  target: "registry",
15
13
  type: "post",
@@ -3,11 +3,9 @@ module.exports = {
3
3
  icon: "claude.png",
4
4
  link: "https://www.anthropic.com/claude-code",
5
5
  watch: [{
6
- handler: "draft",
7
- method: "ready",
6
+ method: "note.watch",
8
7
  params: {
9
- path: ".pinokio/draft",
10
- content: "post.md",
8
+ path: ".pinokio/notes",
11
9
  publish: {
12
10
  target: "registry",
13
11
  type: "post",
@@ -4,11 +4,9 @@ module.exports = {
4
4
  description: "Claude Code with trusted workspace and bypass permissions prompts skipped.",
5
5
  link: "https://www.anthropic.com/claude-code",
6
6
  watch: [{
7
- handler: "draft",
8
- method: "ready",
7
+ method: "note.watch",
9
8
  params: {
10
- path: ".pinokio/draft",
11
- content: "post.md",
9
+ path: ".pinokio/notes",
12
10
  publish: {
13
11
  target: "registry",
14
12
  type: "post",
@@ -5,11 +5,9 @@ module.exports = {
5
5
  description: "Claude desktop",
6
6
  launch_type: "desktop",
7
7
  watch: [{
8
- handler: "draft",
9
- method: "ready",
8
+ method: "note.watch",
10
9
  params: {
11
- path: ".pinokio/draft",
12
- content: "post.md",
10
+ path: ".pinokio/notes",
13
11
  publish: {
14
12
  target: "registry",
15
13
  type: "post",
@@ -3,11 +3,9 @@ module.exports = {
3
3
  icon: "openai.webp",
4
4
  link: "https://github.com/openai/codex",
5
5
  watch: [{
6
- handler: "draft",
7
- method: "ready",
6
+ method: "note.watch",
8
7
  params: {
9
- path: ".pinokio/draft",
10
- content: "post.md",
8
+ path: ".pinokio/notes",
11
9
  publish: {
12
10
  target: "registry",
13
11
  type: "post",
@@ -4,11 +4,9 @@ module.exports = {
4
4
  description: "OpenAI Codex CLI with --yolo and trusted workspace config.",
5
5
  link: "https://github.com/openai/codex",
6
6
  watch: [{
7
- handler: "draft",
8
- method: "ready",
7
+ method: "note.watch",
9
8
  params: {
10
- path: ".pinokio/draft",
11
- content: "post.md",
9
+ path: ".pinokio/notes",
12
10
  publish: {
13
11
  target: "registry",
14
12
  type: "post",
@@ -5,11 +5,9 @@ module.exports = {
5
5
  description: "Codex Desktop",
6
6
  launch_type: "desktop",
7
7
  watch: [{
8
- handler: "draft",
9
- method: "ready",
8
+ method: "note.watch",
10
9
  params: {
11
- path: ".pinokio/draft",
12
- content: "post.md",
10
+ path: ".pinokio/notes",
13
11
  publish: {
14
12
  target: "registry",
15
13
  type: "post",
@@ -3,11 +3,9 @@ module.exports = {
3
3
  icon: "crush.png",
4
4
  link: "https://github.com/charmbracelet/crush",
5
5
  watch: [{
6
- handler: "draft",
7
- method: "ready",
6
+ method: "note.watch",
8
7
  params: {
9
- path: ".pinokio/draft",
10
- content: "post.md",
8
+ path: ".pinokio/notes",
11
9
  publish: {
12
10
  target: "registry",
13
11
  type: "post",
@@ -5,11 +5,9 @@ module.exports = {
5
5
  description: "The AI Code Editor",
6
6
  launch_type: "desktop",
7
7
  watch: [{
8
- handler: "draft",
9
- method: "ready",
8
+ method: "note.watch",
10
9
  params: {
11
- path: ".pinokio/draft",
12
- content: "post.md",
10
+ path: ".pinokio/notes",
13
11
  publish: {
14
12
  target: "registry",
15
13
  type: "post",
@@ -3,11 +3,9 @@ module.exports = {
3
3
  icon: "gemini.jpeg",
4
4
  link: "https://github.com/google-gemini/gemini-cli",
5
5
  watch: [{
6
- handler: "draft",
7
- method: "ready",
6
+ method: "note.watch",
8
7
  params: {
9
- path: ".pinokio/draft",
10
- content: "post.md",
8
+ path: ".pinokio/notes",
11
9
  publish: {
12
10
  target: "registry",
13
11
  type: "post",
@@ -4,11 +4,9 @@ module.exports = {
4
4
  description: "Gemini CLI with workspace trust and tool approvals skipped.",
5
5
  link: "https://github.com/google-gemini/gemini-cli",
6
6
  watch: [{
7
- handler: "draft",
8
- method: "ready",
7
+ method: "note.watch",
9
8
  params: {
10
- path: ".pinokio/draft",
11
- content: "post.md",
9
+ path: ".pinokio/notes",
12
10
  publish: {
13
11
  target: "registry",
14
12
  type: "post",
@@ -3,11 +3,9 @@ module.exports = {
3
3
  link: "https://github.com/QwenLM/qwen-code",
4
4
  icon: "qwen.png",
5
5
  watch: [{
6
- handler: "draft",
7
- method: "ready",
6
+ method: "note.watch",
8
7
  params: {
9
- path: ".pinokio/draft",
10
- content: "post.md",
8
+ path: ".pinokio/notes",
11
9
  publish: {
12
10
  target: "registry",
13
11
  type: "post",
@@ -4,11 +4,9 @@ module.exports = {
4
4
  icon: "vscode.png",
5
5
  description: "The AI Code Editor",
6
6
  watch: [{
7
- handler: "draft",
8
- method: "ready",
7
+ method: "note.watch",
9
8
  params: {
10
- path: ".pinokio/draft",
11
- content: "post.md",
9
+ path: ".pinokio/notes",
12
10
  publish: {
13
11
  target: "registry",
14
12
  type: "post",
@@ -5,11 +5,9 @@ module.exports = {
5
5
  description: "The AI Code Editor",
6
6
  launch_type: "desktop",
7
7
  watch: [{
8
- handler: "draft",
9
- method: "ready",
8
+ method: "note.watch",
10
9
  params: {
11
- path: ".pinokio/draft",
12
- content: "post.md",
10
+ path: ".pinokio/notes",
13
11
  publish: {
14
12
  target: "registry",
15
13
  type: "post",
@@ -0,0 +1,45 @@
1
+ const assert = require("assert")
2
+ const test = require("node:test")
3
+ const PluginSources = require("../kernel/plugin_sources")
4
+
5
+ test("resolveLauncherPluginSelection returns app-dev plugin query paths", () => {
6
+ assert.strictEqual(
7
+ PluginSources.resolveLauncherPluginSelection("codex-auto"),
8
+ "/plugin/codex-auto/pinokio.js"
9
+ )
10
+ assert.strictEqual(
11
+ PluginSources.resolveLauncherPluginSelection("plugin/local-tool"),
12
+ "/plugin/local-tool/pinokio.js"
13
+ )
14
+ assert.strictEqual(
15
+ PluginSources.resolveLauncherPluginSelection("api/my-app/plugins/helper"),
16
+ "/api/my-app/plugins/helper/pinokio.js"
17
+ )
18
+ assert.strictEqual(
19
+ PluginSources.resolveLauncherPluginSelection("pinokio/run/plugin/codex-auto"),
20
+ "/pinokio/run/plugin/codex-auto/pinokio.js"
21
+ )
22
+ })
23
+
24
+ test("normalizeLauncherSuccessPlugin rewrites prototype plugin redirects", () => {
25
+ assert.strictEqual(
26
+ PluginSources.normalizeLauncherSuccessPlugin(
27
+ "/p/example/dev?plugin=/plugin/pinokio/run/plugin/codex-auto/pinokio.js&prompt=build",
28
+ "pinokio/run/plugin/codex-auto"
29
+ ),
30
+ "/p/example/dev?plugin=%2Fpinokio%2Frun%2Fplugin%2Fcodex-auto%2Fpinokio.js&prompt=build"
31
+ )
32
+
33
+ assert.strictEqual(
34
+ PluginSources.normalizeLauncherSuccessPlugin(
35
+ "/p/example/dev?plugin=/plugin/api/my-app/plugins/helper/pinokio.js",
36
+ "api/my-app/plugins/helper"
37
+ ),
38
+ "/p/example/dev?plugin=%2Fapi%2Fmy-app%2Fplugins%2Fhelper%2Fpinokio.js"
39
+ )
40
+
41
+ assert.strictEqual(
42
+ PluginSources.normalizeLauncherSuccessPlugin("/p/example/dev", "pinokio/run/plugin/codex-auto"),
43
+ "/p/example/dev"
44
+ )
45
+ })