@tomflow/proflow-execution-browser-extension 0.1.27 → 0.1.29

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/DOCS.md CHANGED
@@ -6,7 +6,7 @@ Execution 领域拥有的 Chrome MV3 Extension,负责 Task UI、审批提醒
6
6
 
7
7
  ## 主要能力
8
8
 
9
- - 运行期提供 New Task 与 Side Panel UI、Task Observer、System Observer 和 Browser Effect
9
+ - 运行期提供独立 ProFlow Tasks 扩展页面、Task Observer、System Observer 和 Browser Effect;任务 UI 不再以内嵌 Side Panel 形式占用当前网页。
10
10
  - 运行期创建、恢复和唤醒 Custom GPT Conversation,稳定观察 workerRef/c-id。
11
11
  - 部署期通过独立 `/gpts/editor` / `/gpts/editor/*` Provisioning Surface 物化 Custom GPT;该分支不进入 Task/Worker 状态机。
12
12
  - 正常创建路径在单一 GPT Editor 会话中完成字段、Action Schema、API Key/Bearer、Knowledge ZIP、模型与 Capabilities 配置,再创建 Private GPT;不在 Create 后重新打开同一 GPT 做 Auth。
@@ -47,7 +47,7 @@ export declare const behaviorAdapter: {
47
47
  ok: true;
48
48
  status: "SUCCEEDED";
49
49
  moduleRef: "execution-browser-extension";
50
- moduleVersion: "0.1.27";
50
+ moduleVersion: "0.1.29";
51
51
  data: {
52
52
  loadDir: string;
53
53
  };
@@ -60,7 +60,7 @@ export declare const behaviorAdapter: {
60
60
  readonly ok: true;
61
61
  readonly status: "SUCCEEDED";
62
62
  readonly moduleRef: "execution-browser-extension";
63
- readonly moduleVersion: "0.1.27";
63
+ readonly moduleVersion: "0.1.29";
64
64
  };
65
65
  observedEffects: never[];
66
66
  }>;
@@ -70,7 +70,7 @@ export declare const behaviorAdapter: {
70
70
  ok: true;
71
71
  status: "SUCCEEDED";
72
72
  moduleRef: "execution-browser-extension";
73
- moduleVersion: "0.1.27";
73
+ moduleVersion: "0.1.29";
74
74
  data: {
75
75
  setupStatus: "ACTION_REQUIRED" | "READY";
76
76
  runtimeStatus: "NOT_APPLICABLE";
@@ -95,7 +95,7 @@ export declare const behaviorAdapter: {
95
95
  result: {
96
96
  contract: "deployment.result.v1";
97
97
  moduleRef: "execution-browser-extension";
98
- moduleVersion: "0.1.27";
98
+ moduleVersion: "0.1.29";
99
99
  ok: false;
100
100
  status: "ACTION_REQUIRED";
101
101
  data: {
@@ -127,14 +127,14 @@ export declare const behaviorAdapter: {
127
127
  readonly ok: true;
128
128
  readonly status: "SUCCEEDED";
129
129
  readonly moduleRef: "execution-browser-extension";
130
- readonly moduleVersion: "0.1.27";
130
+ readonly moduleVersion: "0.1.29";
131
131
  };
132
132
  observedEffects: string[];
133
133
  } | {
134
134
  result: {
135
135
  contract: "deployment.result.v1";
136
136
  moduleRef: "execution-browser-extension";
137
- moduleVersion: "0.1.27";
137
+ moduleVersion: "0.1.29";
138
138
  ok: false;
139
139
  status: "FAILED";
140
140
  error: {
@@ -167,7 +167,7 @@ export declare const behaviorAdapter: {
167
167
  ok: true;
168
168
  status: "SUCCEEDED";
169
169
  moduleRef: "execution-browser-extension";
170
- moduleVersion: "0.1.27";
170
+ moduleVersion: "0.1.29";
171
171
  data: {
172
172
  docs: string;
173
173
  };
@@ -180,11 +180,11 @@ export declare const behaviorAdapter: {
180
180
  readonly ok: true;
181
181
  readonly status: "SUCCEEDED";
182
182
  readonly moduleRef: "execution-browser-extension";
183
- readonly moduleVersion: "0.1.27";
183
+ readonly moduleVersion: "0.1.29";
184
184
  } | {
185
185
  contract: "deployment.result.v1";
186
186
  moduleRef: "execution-browser-extension";
187
- moduleVersion: "0.1.27";
187
+ moduleVersion: "0.1.29";
188
188
  ok: false;
189
189
  status: "FAILED";
190
190
  error: {
@@ -201,7 +201,7 @@ export declare const behaviorAdapter: {
201
201
  readonly ok: true;
202
202
  readonly status: "SUCCEEDED";
203
203
  readonly moduleRef: "execution-browser-extension";
204
- readonly moduleVersion: "0.1.27";
204
+ readonly moduleVersion: "0.1.29";
205
205
  };
206
206
  observedEffects: never[];
207
207
  }>;
@@ -3,7 +3,7 @@ export declare const descriptor: {
3
3
  readonly contractVersion: "1.0.0";
4
4
  readonly moduleRef: "execution-browser-extension";
5
5
  readonly packageName: "@tomflow/proflow-execution-browser-extension";
6
- readonly moduleVersion: "0.1.27";
6
+ readonly moduleVersion: "0.1.29";
7
7
  readonly kind: "browser-extension";
8
8
  readonly templateVersion: "1.0.0";
9
9
  readonly platformCompatibility: ">=1.0.0 <2.0.0";
@@ -3,7 +3,7 @@ export const descriptor = {
3
3
  contractVersion: "1.0.0",
4
4
  moduleRef: "execution-browser-extension",
5
5
  packageName: "@tomflow/proflow-execution-browser-extension",
6
- moduleVersion: "0.1.27",
6
+ moduleVersion: "0.1.29",
7
7
  kind: "browser-extension",
8
8
  templateVersion: "1.0.0",
9
9
  platformCompatibility: ">=1.0.0 <2.0.0",
@@ -14779,6 +14779,18 @@ chrome.runtime.onMessage.addListener((message, sender, sendResponse) => {
14779
14779
  return true;
14780
14780
  }
14781
14781
  });
14782
+ async function openTaskPage() {
14783
+ const taskPageUrl = chrome.runtime.getURL("extension/tasks.html");
14784
+ const [existing] = await chrome.tabs.query({
14785
+ url: taskPageUrl,
14786
+ currentWindow: true
14787
+ });
14788
+ if (existing?.id !== void 0) {
14789
+ await chrome.tabs.update(existing.id, { active: true });
14790
+ return;
14791
+ }
14792
+ await chrome.tabs.create({ url: taskPageUrl, active: true });
14793
+ }
14782
14794
  async function startBackgroundRuntime() {
14783
14795
  await bootstrapManagedRuntimeConfig();
14784
14796
  await persistSnapshot();
@@ -14786,8 +14798,10 @@ async function startBackgroundRuntime() {
14786
14798
  void runProvisioningBridgeLoop();
14787
14799
  void runObserverRecovery();
14788
14800
  }
14801
+ chrome.action.onClicked.addListener(() => {
14802
+ void openTaskPage();
14803
+ });
14789
14804
  chrome.runtime.onInstalled.addListener(() => {
14790
- void chrome.sidePanel.setPanelBehavior({ openPanelOnActionClick: true });
14791
14805
  void bootstrapManagedRuntimeConfig().then(async () => {
14792
14806
  await persistSnapshot();
14793
14807
  void runBridgeLoop();
@@ -2,7 +2,7 @@ export {};
2
2
  function element(selector) {
3
3
  const value = document.querySelector(selector);
4
4
  if (!value)
5
- throw new Error(`SIDE_PANEL_TARGET_MISSING:${selector}`);
5
+ throw new Error(`TASK_PAGE_TARGET_MISSING:${selector}`);
6
6
  return value;
7
7
  }
8
8
  const connection = element("#connection");
@@ -81,7 +81,7 @@ async function refreshApprovals() {
81
81
  await approvalApplication("approval.deny", {
82
82
  approvalRef: approval.approvalRef,
83
83
  expectedVersion: approval.version,
84
- reason: "Denied from Extension Side Panel",
84
+ reason: "Denied from Extension Task Page",
85
85
  });
86
86
  await refreshApprovals();
87
87
  }));
@@ -116,7 +116,7 @@ async function loadTask(taskId) {
116
116
  await taskApplication("node.reopen", {
117
117
  taskId: selected.taskId,
118
118
  nodeId: node.nodeId,
119
- reason: "Human reopen from Extension Side Panel",
119
+ reason: "Human reopen from Extension Task Page",
120
120
  expectedTaskVersion: selected.version,
121
121
  idempotencyKey: requestId("extension-reopen"),
122
122
  });
package/dist/src/index.js CHANGED
@@ -238,8 +238,8 @@ export function createExecutionBrowserExtension(options) {
238
238
  if (roleIdentity.roleRef !== request.input.roleRef ||
239
239
  roleIdentity.workerRef)
240
240
  throw new ExecutionBrowserError("PRECONDITION_FAILED", "ROLE_URL_MISMATCH");
241
- const precondition = await effectStarted(raw);
242
241
  const opened = await options.browser.open(request.input.roleUrl);
242
+ const precondition = await effectStarted(raw);
243
243
  const submitted = await options.browser.submit(opened.tabId, `WORKER_BIND ${request.input.bootstrapFingerprint}`, request.input.bootstrapFingerprint);
244
244
  if (!(await options.browser.hasMessage(submitted.tabId, request.input.bootstrapFingerprint)))
245
245
  throw new ExecutionBrowserError("UNKNOWN_SIDE_EFFECT", "CREATE_MESSAGE_REALITY_UNCONFIRMED");
@@ -112,13 +112,11 @@ type ChromeRuntime = {
112
112
  set(value: Record<string, unknown>): Promise<void>;
113
113
  };
114
114
  };
115
- sidePanel: {
116
- setPanelBehavior(options: {
117
- openPanelOnActionClick: boolean;
118
- }): Promise<void>;
115
+ action: {
116
+ onClicked: { addListener(listener: () => void): void };
119
117
  };
120
118
  tabs: {
121
- query(query: { url?: string }): Promise<ChromeTab[]>;
119
+ query(query: { url?: string; currentWindow?: boolean }): Promise<ChromeTab[]>;
122
120
  get(tabId: number): Promise<ChromeTab>;
123
121
  create(create: { url: string; active: boolean }): Promise<ChromeTab>;
124
122
  reload(tabId: number): Promise<void>;
@@ -1319,6 +1317,19 @@ chrome.runtime.onMessage.addListener((message, sender, sendResponse) => {
1319
1317
  }
1320
1318
  });
1321
1319
 
1320
+ async function openTaskPage(): Promise<void> {
1321
+ const taskPageUrl = chrome.runtime.getURL("extension/tasks.html");
1322
+ const [existing] = await chrome.tabs.query({
1323
+ url: taskPageUrl,
1324
+ currentWindow: true,
1325
+ });
1326
+ if (existing?.id !== undefined) {
1327
+ await chrome.tabs.update(existing.id, { active: true });
1328
+ return;
1329
+ }
1330
+ await chrome.tabs.create({ url: taskPageUrl, active: true });
1331
+ }
1332
+
1322
1333
  async function startBackgroundRuntime(): Promise<void> {
1323
1334
  await bootstrapManagedRuntimeConfig();
1324
1335
  await persistSnapshot();
@@ -1327,8 +1338,10 @@ async function startBackgroundRuntime(): Promise<void> {
1327
1338
  void runObserverRecovery();
1328
1339
  }
1329
1340
 
1341
+ chrome.action.onClicked.addListener(() => {
1342
+ void openTaskPage();
1343
+ });
1330
1344
  chrome.runtime.onInstalled.addListener(() => {
1331
- void chrome.sidePanel.setPanelBehavior({ openPanelOnActionClick: true });
1332
1345
  void bootstrapManagedRuntimeConfig().then(async () => {
1333
1346
  await persistSnapshot();
1334
1347
  void runBridgeLoop();
@@ -29,7 +29,7 @@
29
29
 
30
30
  <section>
31
31
  <h2>Task Application</h2>
32
- <p>Connects the Side Panel to the loopback platform-host application surface. This credential is separate from Role and Browser-bridge credentials.</p>
32
+ <p>Connects the independent ProFlow Tasks page to the loopback platform-host application surface. This credential is separate from Role and Browser-bridge credentials.</p>
33
33
  <form id="task-application-form">
34
34
  <label>Platform-host endpoint <input id="task-application-endpoint" required placeholder="http://127.0.0.1:47830" /></label>
35
35
  <label>Task application token <input id="task-application-token" type="password" required autocomplete="off" /></label>
@@ -3,25 +3,28 @@
3
3
  <head>
4
4
  <meta charset="utf-8" />
5
5
  <meta name="viewport" content="width=device-width" />
6
- <title>ProFlow</title>
6
+ <title>ProFlow Tasks</title>
7
7
  <style>
8
- body { font: 13px system-ui; margin: 12px; }
9
- section { border-top: 1px solid #ddd; margin-top: 14px; padding-top: 10px; }
8
+ body { background: #f7f7f8; color: #18181b; font: 14px system-ui; margin: 0; }
9
+ main { box-sizing: border-box; margin: 0 auto; max-width: 1180px; padding: 28px; }
10
+ header { margin-bottom: 20px; }
11
+ section { background: #fff; border: 1px solid #e4e4e7; border-radius: 10px; margin-top: 14px; padding: 16px; }
10
12
  label { display: block; margin: 8px 0; }
11
- input, textarea { box-sizing: border-box; display: block; margin-top: 4px; width: 100%; }
12
- textarea { min-height: 72px; }
13
- button { margin: 4px 4px 4px 0; padding: 5px 9px; }
13
+ input, textarea { box-sizing: border-box; display: block; margin-top: 4px; padding: 8px; width: 100%; }
14
+ textarea { min-height: 84px; }
15
+ button { margin: 4px 4px 4px 0; padding: 7px 11px; }
14
16
  button[disabled] { opacity: .55; }
15
- .task { border: 1px solid #ddd; margin: 6px 0; padding: 7px; }
16
- .meta { color: #555; font-size: 12px; }
17
+ .task { border: 1px solid #e4e4e7; border-radius: 8px; margin: 8px 0; padding: 10px; }
18
+ .meta { color: #52525b; font-size: 12px; }
17
19
  #error { color: #a00; white-space: pre-wrap; }
18
20
  #result { white-space: pre-wrap; }
19
- #browser-status { max-height: 180px; overflow: auto; }
21
+ #browser-status { max-height: 220px; overflow: auto; }
20
22
  </style>
21
23
  </head>
22
24
  <body>
25
+ <main>
23
26
  <header>
24
- <h1>ProFlow</h1>
27
+ <h1>ProFlow Tasks</h1>
25
28
  <div id="connection" class="meta">Connecting…</div>
26
29
  </header>
27
30
 
@@ -54,7 +57,7 @@
54
57
 
55
58
  <section>
56
59
  <h2>Execution Approval</h2>
57
- <p class="meta">Approval is an Execution-owned durable fact. This panel only sends authenticated human decisions to the Execution Owner.</p>
60
+ <p class="meta">Approval is an Execution-owned durable fact. This page only sends authenticated human decisions to the Execution Owner.</p>
58
61
  <button id="refresh-approvals" type="button">Refresh approvals</button>
59
62
  <div id="approvals"></div>
60
63
  </section>
@@ -72,6 +75,7 @@
72
75
 
73
76
  <p id="error" role="alert"></p>
74
77
  <pre id="result" role="status"></pre>
75
- <script type="module" src="../dist/extension/side-panel.js"></script>
78
+ <script type="module" src="../dist/extension/tasks.js"></script>
79
+ </main>
76
80
  </body>
77
81
  </html>
@@ -47,7 +47,7 @@ type TaskView = TaskSummary & {
47
47
 
48
48
  function element<T extends HTMLElement>(selector: string): T {
49
49
  const value = document.querySelector<T>(selector);
50
- if (!value) throw new Error(`SIDE_PANEL_TARGET_MISSING:${selector}`);
50
+ if (!value) throw new Error(`TASK_PAGE_TARGET_MISSING:${selector}`);
51
51
  return value;
52
52
  }
53
53
 
@@ -152,7 +152,7 @@ async function refreshApprovals() {
152
152
  await approvalApplication("approval.deny", {
153
153
  approvalRef: approval.approvalRef,
154
154
  expectedVersion: approval.version,
155
- reason: "Denied from Extension Side Panel",
155
+ reason: "Denied from Extension Task Page",
156
156
  });
157
157
  await refreshApprovals();
158
158
  }),
@@ -189,7 +189,7 @@ async function loadTask(taskId: string) {
189
189
  await taskApplication("node.reopen", {
190
190
  taskId: selected.taskId,
191
191
  nodeId: node.nodeId,
192
- reason: "Human reopen from Extension Side Panel",
192
+ reason: "Human reopen from Extension Task Page",
193
193
  expectedTaskVersion: selected.version,
194
194
  idempotencyKey: requestId("extension-reopen"),
195
195
  });
package/manifest.json CHANGED
@@ -1,11 +1,10 @@
1
1
  {
2
2
  "manifest_version": 3,
3
3
  "name": "ProFlow Execution Browser",
4
- "version": "0.1.27",
4
+ "version": "0.1.29",
5
5
  "permissions": [
6
6
  "tabs",
7
- "storage",
8
- "sidePanel"
7
+ "storage"
9
8
  ],
10
9
  "host_permissions": [
11
10
  "https://chatgpt.com/*",
@@ -36,8 +35,8 @@
36
35
  "run_at": "document_idle"
37
36
  }
38
37
  ],
39
- "side_panel": {
40
- "default_path": "extension/side-panel.html"
38
+ "action": {
39
+ "default_title": "Open ProFlow Tasks"
41
40
  },
42
41
  "options_page": "extension/options.html"
43
42
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tomflow/proflow-execution-browser-extension",
3
- "version": "0.1.27",
3
+ "version": "0.1.29",
4
4
  "description": "Execution-owned MV3 Browser executor, evidence provider and browser application surface.",
5
5
  "type": "module",
6
6
  "publishConfig": {
@@ -27,12 +27,12 @@
27
27
  "SETUP.md"
28
28
  ],
29
29
  "dependencies": {
30
- "@tomflow/proflow-module-contract": "^0.1.13",
31
- "@tomflow/proflow-execution-contracts": "^0.1.10"
30
+ "@tomflow/proflow-execution-contracts": "^0.1.10",
31
+ "@tomflow/proflow-module-contract": "^0.1.13"
32
32
  },
33
33
  "devDependencies": {
34
- "@tomflow/proflow-execution-runtime": "^0.1.15",
35
- "@tomflow/proflow-deployment-conformance": "^0.1.13"
34
+ "@tomflow/proflow-deployment-conformance": "^0.1.13",
35
+ "@tomflow/proflow-execution-runtime": "^0.1.15"
36
36
  },
37
37
  "keywords": [
38
38
  "proflow",
@@ -3,7 +3,7 @@
3
3
  "contractVersion": "1.0.0",
4
4
  "moduleRef": "execution-browser-extension",
5
5
  "packageName": "@tomflow/proflow-execution-browser-extension",
6
- "moduleVersion": "0.1.27",
6
+ "moduleVersion": "0.1.29",
7
7
  "kind": "browser-extension",
8
8
  "templateVersion": "1.0.0",
9
9
  "platformCompatibility": ">=1.0.0 <2.0.0",
File without changes