Skip to content

Commit aa7d970

Browse files
authored
Merge pull request #406 from Extra-Chill/multimode-pipeline-tools
Require opt-in for pipeline workspace tools
2 parents a249a3c + 6e86dc6 commit aa7d970

2 files changed

Lines changed: 16 additions & 14 deletions

File tree

inc/Tools/WorkspaceTools.php

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -69,26 +69,27 @@ public function check_configuration( $configured, $tool_id ) {
6969
*/
7070
public function __construct() {
7171
$contexts = array( 'chat', 'pipeline' );
72-
$policy_contexts = array( 'chat', 'pipeline_policy' );
72+
$policy_contexts = array( 'chat', 'pipeline' );
73+
$policy_meta = array( 'requires_opt_in' => true );
7374
$this->registerTool( 'workspace_path', array( $this, 'getPathDefinition' ), $contexts, array( 'ability' => 'datamachine/workspace-path' ) );
7475
$this->registerTool( 'workspace_capabilities', array( $this, 'getCapabilitiesDefinition' ), $contexts, array( 'ability' => 'datamachine/workspace-capabilities' ) );
7576
$this->registerTool( 'workspace_list', array( $this, 'getListDefinition' ), $contexts, array( 'ability' => 'datamachine/workspace-list' ) );
7677
$this->registerTool( 'workspace_show', array( $this, 'getShowDefinition' ), $contexts, array( 'ability' => 'datamachine/workspace-show' ) );
7778
$this->registerTool( 'workspace_ls', array( $this, 'getLsDefinition' ), $contexts, array( 'ability' => 'datamachine/workspace-ls' ) );
7879
$this->registerTool( 'workspace_read', array( $this, 'getReadDefinition' ), $contexts, array( 'ability' => 'datamachine/workspace-read' ) );
7980
$this->registerTool( 'workspace_grep', array( $this, 'getGrepDefinition' ), $contexts, array( 'ability' => 'datamachine/workspace-grep' ) );
80-
$this->registerTool( 'workspace_write', array( $this, 'getWriteDefinition' ), $policy_contexts, array( 'ability' => 'datamachine/workspace-write' ) );
81-
$this->registerTool( 'workspace_edit', array( $this, 'getEditDefinition' ), $policy_contexts, array( 'ability' => 'datamachine/workspace-edit' ) );
82-
$this->registerTool( 'workspace_apply_patch', array( $this, 'getApplyPatchDefinition' ), $policy_contexts, array( 'ability' => 'datamachine/workspace-apply-patch' ) );
83-
$this->registerTool( 'workspace_delete', array( $this, 'getDeleteDefinition' ), $policy_contexts, array( 'ability' => 'datamachine/workspace-delete' ) );
84-
$this->registerTool( 'workspace_git_status', array( $this, 'getGitStatusDefinition' ), $policy_contexts, array( 'ability' => 'datamachine/workspace-git-status' ) );
85-
$this->registerTool( 'workspace_git_log', array( $this, 'getGitLogDefinition' ), $policy_contexts, array( 'ability' => 'datamachine/workspace-git-log' ) );
86-
$this->registerTool( 'workspace_git_diff', array( $this, 'getGitDiffDefinition' ), $policy_contexts, array( 'ability' => 'datamachine/workspace-git-diff' ) );
87-
$this->registerTool( 'workspace_git_pull', array( $this, 'getGitPullDefinition' ), $policy_contexts, array( 'ability' => 'datamachine/workspace-git-pull' ) );
88-
$this->registerTool( 'workspace_worktree_add', array( $this, 'getWorktreeAddDefinition' ), $policy_contexts, array( 'ability' => 'datamachine/workspace-worktree-add' ) );
89-
$this->registerTool( 'workspace_git_add', array( $this, 'getGitAddDefinition' ), $policy_contexts, array( 'ability' => 'datamachine/workspace-git-add' ) );
90-
$this->registerTool( 'workspace_git_commit', array( $this, 'getGitCommitDefinition' ), $policy_contexts, array( 'ability' => 'datamachine/workspace-git-commit' ) );
91-
$this->registerTool( 'workspace_git_push', array( $this, 'getGitPushDefinition' ), $policy_contexts, array( 'ability' => 'datamachine/workspace-git-push' ) );
81+
$this->registerTool( 'workspace_write', array( $this, 'getWriteDefinition' ), $policy_contexts, $policy_meta + array( 'ability' => 'datamachine/workspace-write' ) );
82+
$this->registerTool( 'workspace_edit', array( $this, 'getEditDefinition' ), $policy_contexts, $policy_meta + array( 'ability' => 'datamachine/workspace-edit' ) );
83+
$this->registerTool( 'workspace_apply_patch', array( $this, 'getApplyPatchDefinition' ), $policy_contexts, $policy_meta + array( 'ability' => 'datamachine/workspace-apply-patch' ) );
84+
$this->registerTool( 'workspace_delete', array( $this, 'getDeleteDefinition' ), $policy_contexts, $policy_meta + array( 'ability' => 'datamachine/workspace-delete' ) );
85+
$this->registerTool( 'workspace_git_status', array( $this, 'getGitStatusDefinition' ), $policy_contexts, $policy_meta + array( 'ability' => 'datamachine/workspace-git-status' ) );
86+
$this->registerTool( 'workspace_git_log', array( $this, 'getGitLogDefinition' ), $policy_contexts, $policy_meta + array( 'ability' => 'datamachine/workspace-git-log' ) );
87+
$this->registerTool( 'workspace_git_diff', array( $this, 'getGitDiffDefinition' ), $policy_contexts, $policy_meta + array( 'ability' => 'datamachine/workspace-git-diff' ) );
88+
$this->registerTool( 'workspace_git_pull', array( $this, 'getGitPullDefinition' ), $policy_contexts, $policy_meta + array( 'ability' => 'datamachine/workspace-git-pull' ) );
89+
$this->registerTool( 'workspace_worktree_add', array( $this, 'getWorktreeAddDefinition' ), $policy_contexts, $policy_meta + array( 'ability' => 'datamachine/workspace-worktree-add' ) );
90+
$this->registerTool( 'workspace_git_add', array( $this, 'getGitAddDefinition' ), $policy_contexts, $policy_meta + array( 'ability' => 'datamachine/workspace-git-add' ) );
91+
$this->registerTool( 'workspace_git_commit', array( $this, 'getGitCommitDefinition' ), $policy_contexts, $policy_meta + array( 'ability' => 'datamachine/workspace-git-commit' ) );
92+
$this->registerTool( 'workspace_git_push', array( $this, 'getGitPushDefinition' ), $policy_contexts, $policy_meta + array( 'ability' => 'datamachine/workspace-git-push' ) );
9293
}
9394

9495
/**

tests/smoke-workspace-policy-tools.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,8 @@ static function ( array $tools ) use ( $tool_id, $definition_callback, $contexts
104104
);
105105

106106
foreach ( $policy_tools as $tool ) {
107-
$assert( "{$tool} is policy-gated for pipeline use", array( 'chat', 'pipeline_policy' ) === ( $tools[ $tool ]['modes'] ?? null ) );
107+
$assert( "{$tool} is available in real chat and pipeline modes", array( 'chat', 'pipeline' ) === ( $tools[ $tool ]['modes'] ?? null ) );
108+
$assert( "{$tool} requires explicit opt-in for pipeline use", true === ( $tools[ $tool ]['requires_opt_in'] ?? null ) );
108109
}
109110

110111
if ( $failures ) {

0 commit comments

Comments
 (0)